一、继承
1、简单说明
子类可以拥有父类中除了私有变量/函数外的所有的内容,当出现x是y的一种什么的时候可以使用继承,x继承于y,x是y的儿子,x子类是对y父类的扩展。反映的是一种特殊关系,如动物->哺乳动物->蓝鲸关键字 extends: 只支持单继承(一个继承另一个),不支持多继承(c#同样不允许,c++却允许)。作用:简化代码,提高代码重用率。
2、继承练习
(1)动物类(爷爷类)
public class Test04_Animal{public String name = "蓝鲸";public int age = 23;}
(2)哺乳动物类(父亲类)
public class Test04_Mammal extends Test04_Animal{//继承动物类public int size = 50; //多加了一个变量}
(3)蓝鲸类(儿子类)
public class Test04_Whale extends Test04_Mammal{//继承哺乳类//定义一个说话的方法public void speek(){System.out.println("我是" + this.age + "大" + this.size + "米长的" + this.name);} //父类中的公有变量也可以使用this进行访问public static void main(String[] args){Test04_Whale tw = new Test04_Whale(); //创建对象tw.speek(); //调用鲸鱼说话的方法}}
3、继承关系
二、super关键字
1、简单说明
(1)super表示父类中的内容,当父类和子类有同名变量时,使用this是访问子类的,而使用super就是访问父类的public或protected方法。
(2)只能在子类中的构造方法中使用,用于初始化继承自父类的属性,并且需要父类中已经定义了相应签名的构造方法。
(3)可以使用super()调用父类的构造方法,并且只能放在子类构造方法的第一行,且只能调用一次super方法。
2、测试练习
(1)父类
public class Test04_Mammal extends Test04_Animal{//继承动物类public int size = 50; //多加了一个变量protected String addr; //保护变量,子类继承中可以继承保护变量和公有变量//定义父类的构造方法public Test04_Mammal(String addr){this.addr = addr;}}
(2)子类
public class Test04_Whale extends Test04_Mammal{//继承哺乳类//定义一个说话的方法public void speek(){System.out.println("我是" + this.age + "大" + this.size + "米长的" + this.name);} //父类中的公有变量也可以使用this进行访问//定义子类的构造方法public Test04_Whale(){super("太平洋"); //调用父类的构造方法,传入参数System.out.println("我住在" + super.addr);}//定义主方法public static void main(String[] args){Test04_Whale tw = new Test04_Whale(); //创建对象,调用子类构造方法tw.speek(); //调用鲸鱼说话的方法}}
三、方法的重写
1、简单说明
(1)就是子类对父类中的方法进行重新定义,子类和父类中的方法声明完全一致(毕竟重写肯定是写同一个方法)。
(2)常用于子类对父类的方法不满意,想要更新或者拓展父类的方法。
(3)子类继承的方法的权限,不应比继承自父类的方法更严格(为了保证多态都能实现)。
(4)返回值不能作为重载的条件,因为子类中有了两个同名同参但不同返回值的方法。
2、测试练习
(1)父类
public class Test04_Mammal extends Test04_Animal{//继承动物类public int size = 50; //多加了一个变量protected String addr; //保护变量,子类继承中可以继承保护变量和公有变量//定义父类的构造方法public Test04_Mammal(String addr){this.addr = addr;}//父类中定义一个说话的方法public void speek(){System.out.println("我是" + this.age + "大" + this.size + "米长的" + this.name);}}
(2)子类
public class Test04_Whale extends Test04_Mammal{//继承哺乳类//定义子类的构造方法public Test04_Whale(){super("太平洋"); //调用父类的构造方法,传入参数}//定义对父类的speek方法的重写:半盖法public void speek(){//但重写时又调用了一次父类的speek方法,这样就可以不用担心父类的方法丢失了(半盖法)super.speek(); //此外,重写时又添加了一条地址语句的输出System.out.println("I am in " + super.addr); }//定义主方法public static void main(String[] args){Test04_Whale tw = new Test04_Whale(); //创建对象,调用子类构造方法tw.speek(); //调用鲸鱼说话的方法}}