this和super不能出現(xiàn)在static的方法中
重寫:方法名和參數(shù)都相同,子類覆蓋父類
重載:方法名相同,參數(shù)列表個(gè)數(shù)和類型不同
重寫模塊
class Bird {
public void fly() {
System.out.println("fly in the sky");
}
}
public class TestOverride extends Bird {
public void fyl(){
System.out.println("fly on the ground");
}
public static void main(String[] args) {
TestOverride p = new TestOverride();
p.fyl();
}
}
- 重載模塊
public class TestOverload {
public String name;
public String color;
public int age;
public TestOverload(){
System.out.println("無(wú)參的構(gòu)造方法");
}
public TestOverload(String name,String color) {
this.name = name;
this.color = color;
System.out.println("有2個(gè)參數(shù)的構(gòu)造方法");
}
public TestOverload(String name,String color,int age) {
this(name,color); //這里的this 引用了上一個(gè)構(gòu)造器里的內(nèi)容,必須放在第一行
this.age = age;
System.out.println("有3個(gè)參數(shù)的構(gòu)造方法");
}
public static void main(String[] agrs) {
TestOverload p = new TestOverload();
TestOverload p1 = new TestOverload("chenanle","blue",24);
}
}
在一個(gè)構(gòu)造器中調(diào)用另一個(gè)重載的構(gòu)造器使用this來(lái)實(shí)現(xiàn),在子類構(gòu)造器中調(diào)用父類的構(gòu)造器使用super來(lái)實(shí)現(xiàn)
以下代碼先打印父類中的語(yǔ)句,再打印出后面一條語(yǔ)句
class sub {
public double size;
public String name;
public sub(){}
public sub(double size,String name) {
this.size = size;
this.name = name;
System.out.println("先打印父類中的語(yǔ)句");
}
}
public class TestSub extends sub {
public String color;
public TestSub(String color,double size,String name) {
super(size,name);
this.color = color;
System.out.println("再打印子類中的語(yǔ)句");
}
public static void main(String[] args) {
TestSub ts = new TestSub("blue",5.6,"chenanle");
System.out.println("最后打印如下語(yǔ)句");
System.out.println(ts.size +"--"+ts.color+"--"+ts.name);
}
}
結(jié)果為:
先打印父類中的語(yǔ)句
再打印子類中的語(yǔ)句
最后打印如下語(yǔ)句
5.6--blue--chenanle
多態(tài)
class BaseClass{
public int book = 6;
public void base() {
System.out.println("父類普通的方法");
}
public void test() {
System.out.println("父類被重寫的方法");
}
}
class SubClass extends BaseClass {
public String book = "books";
public void sub() {
System.out.println("子類普通的方法");
}
public void test() {
System.out.println("子類重寫父類的方法");
}
}
public class TestDuoTai {
public static void main(String[] args){
BaseClass bc = new BaseClass();
System.out.println(bc.book);
bc.test();
bc.base();
SubClass sc = new SubClass();
System.out.println(sc.book);
sc.test();
sc.base();
BaseClass polymorphism = new SubClass(); //多態(tài) ,向上轉(zhuǎn)型
System.out.println(polymorphism.book);
polymorphism.base();
polymorphism.test();
}
}
- 打印結(jié)果為:
6
父類被重寫的方法
父類普通的方法
books
子類重寫父類的方法
父類普通的方法
6
父類普通的方法
子類重寫父類的方法
- BaseClass polymorphism = new SubClass();它編譯時(shí)類型是BaseClass,運(yùn)行時(shí)是SubClass,當(dāng)調(diào)用引用變量的test()方法是,實(shí)際上是調(diào)用了子類里的test()方法,因?yàn)楦割惱锏膖est()方法被子類重寫了(覆蓋了),這就是多態(tài)。