什么是继承 super 重载 重写

程序员成长之旅 · 程序员成长之旅/Java学习/笔记 · 1225 字

继承可以看成是类与类之间的衍生关系。比如狗类是动物类,牧羊犬类又是狗类。 于是我们可以说狗类继承了动物类,而牧羊犬类就继承了狗类。于是狗类就是动物类的子类(或派生类),动物类就是狗类的父类(或基类)。

使用方法 class 子类 extends 父类

1 1

1 class

子类

extends

父类 来看三段代码 public class Animal { int legNum; String aml; public Animal() { } public Animal(String aml) { this.aml = aml; //System.out.println(aml); } public void bark() { if (aml != null) { if (aml == "dog") { System.out.println("汪汪汪!!!"); }else{ System.out.println("不存在这个动物"); } }else{ System.out.println("动物叫"); } } }

x

1 public

class

Animal { 2

int

legNum ; 3

String

aml ; 4 5

public

Animal () { 6 7 } 8 9

public

Animal ( String

aml ) { 10

this . aml

=

aml ; 11

//System.out.println(aml); 12 } 13 14

public

void

bark () { 15

if ( aml

!=

null ) { 16

if ( aml

==

"dog" ) { 17

System . out . println ( "汪汪汪!!!" ); 18 } else { 19

System . out . println ( "不存在这个动物" ); 20 } 21 } else { 22

System . out . println ( "动物叫" ); 23 } 24 } 25 } //dog.java 使用狗=dog来继承父类Animal public class dog extends Animal{//可以看到继承Animal的dog内没有任何方法 }

1 //dog.java 使用狗=dog来继承父类Animal 2 public

class

dog

extends

Animal { //可以看到继承Animal的dog内没有任何方法 3

4 } //test.java 使用test来测试 public class test{ public static void main(String[] args){ dog touch = new dog(); //初始化dog //touch.bark(); //touch.hi(); touch.bark(); //调用"没有"方法的dog会发生什么? //touch.hi(); } }

x

1 //test.java 使用test来测试 2 public

class

test { 3

public

static

void

main ( String [] args ){ 4

dog

touch

=

new

dog (); //初始化dog 5

//touch.bark(); 6

//touch.hi(); 7

touch . bark (); //调用"没有"方法的dog会发生什么? 8

//touch.hi(); 9 } 10 } 执行test 运行结果 动物叫 可以看到我们成功调用了调用"没有"方法的dog.bark

向其传参dog 运行结果 //dog.java public class dog extends Animal{ public dog(){ } public dog(String aml){//在构造器阶段将传入的参数转发给父类Animal //super可以调用在子类调用父类的方法 如 super.xxx(); super(aml);//注意super若想向其构造器传递参数则不需要添加 "." 直接super(参数); 即可 } }

10 10

1 //dog.java 2 public

class

dog

extends

Animal { 3

public

dog (){ 4 5 } 6

public

dog ( String

aml ){ //在构造器阶段将传入的参数转发给父类Animal 7

//super可以调用在子类调用父类的方法 如 super.xxx(); 8

super ( aml ); //注意super若想向其构造器传递参数则不需要添加 "." 直接super(参数); 即可 9 } 10 } //test.java public class test{ public static void main(String[] args){ dog touch = new dog("dog");//初始化阶段传递参数dog //touch.bark(); //touch.hi(); touch.bark(); //touch.hi(); } }

1 //test.java 2 public

class

test { 3

public

static

void

main ( String [] args ){ 4

dog

touch

=

new

dog ( "dog" ); //初始化阶段传递参数dog 5

//touch.bark(); 6

//touch.hi(); 7

touch . bark (); 8

//touch.hi(); 9 } 10 }

重载就是相同的方法名字 传入的参数不同(参数类型不同 参数数量不同) 以做出不同回应 就是重载.举个例子 public class Test {//拿这个代码举例 //相同的方法名称 根据不同的传入参数类型和数量做出了不同的回应. void f(int i) { System.out.println("i=" + i); } void f(float f) { System.out.println("f=" + f); } void f(String s) { System.out.println("s=" + s); } void f(String s1, String s2){ System.out.println("s1+s2="+(s1+s2)); } void f(String s, int i){ System.out.println("s="+s+",i="+i); } public static void main(String[] args) { Test test = new Test(); test.f(3456); test.f(34.56f); test.f("abc"); test.f("abc","def"); test.f("abc",3456); } }

x

1 public

class

Test

{ //拿这个代码举例 2

//相同的方法名称 根据不同的传入参数类型和数量做出了不同的回应. 3

void

f ( int

i ) { 4

System . out . println ( "i="

i ); 5 } 6 7

void

f ( float

f ) { 8

System . out . println ( "f="

f ); 9 } 10 11

void

f ( String

s ) { 12

System . out . println ( "s="

s ); 13 } 14 15

void

f ( String

s1 , String

s2 ){ 16

System . out . println ( "s1+s2=" + ( s1 + s2 )); 17 } 18 19

void

f ( String

s , int

i ){ 20

System . out . println ( "s=" + s + ",i=" + i ); 21 } 22 23

public

static

void

main ( String [] args ) { 24

Test

test

=

new

Test (); 25

test . f ( 3456 ); 26

test . f ( 34.56f ); 27

test . f ( "abc" ); 28

test . f ( "abc" , "def" ); 29

test . f ( "abc" , 3456 ); 30 } 31 }

重写用以下代码来演示 在父类Animal不变的情况下 在dog.java(子类)写一个相同的方法名 即可完成重写 //dog.java public class dog extends Animal{ public dog(){ } public dog(String aml){ super(aml); } public void bark(){//此时的bark不再有Animal的判定 只是无脑返回动物叫了 System.out.println("动物叫 重写成功"); } }

x 12

1 //dog.java 2 public

class

dog

extends

Animal { 3

public

dog (){ 4 5 } 6

public

dog ( String

aml ){ 7

super ( aml ); 8 } 9

public

void

bark (){ //此时的bark不再有Animal的判定 只是无脑返回动物叫了 10

System . out . println ( "动物叫 重写成功" ); 11 } 12 } //test.java public class test{ public static void main(String[] args){ dog touch = new dog(); touch.bark(); } }

7

1 //test.java 2 public

class

test { 3

public

static

void

main ( String [] args ){ 4

dog

touch

=

new

dog (); 5

touch . bark (); 6 } 7 } 运行结果 动物叫 重写成功