继承的概述和实现
-
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。父类更抽象,子类更具体。
-
如下图,有害垃圾、可回收垃圾等它们都带有父类垃圾的特征,但是它们又拥有自己更具体的属性,像有害、可回收等。
-
Java会给每一个没有设置父类的类,自动添加一个父类就是Object 。(除了Object类都是子类)。
-
在 Java 中通过 extends 关键字可以申明一个类是从另外一个类继承而来的,一般声明形式如下:
class 父类名{ //父类成员 } class 子类名 extends 父类名{ //子类成员 }
-
子类继承其父类的所有public和protected成员
-
父类的private成员子类不能继承,父类的protected成员子类可以继承
class Animal{ public String name; int age; protected String sex; private String voice; public void setvoice(String voice){ this.voice = voice; } public void saying(){ System.out.println(voice + "!!!"); } } class dog extends Animal{ dog(){ name = "二哈"; sex = "公"; setvoice("汪汪汪"); saying(); } } public class Test { public static void main(String[] args) { dog twoha = new dog(); System.out.println("大家好,我是" +twoha.name+",是一条"+twoha.sex+"狗"); } }
-
输出
汪汪汪!!! 大家好,我是二哈,是一条公狗
super关键字
-
super关键字跟this关键字类似,super代表了对父类的引用
-
当子父类的成员同名时以super来区分
-
子类的构造方法中可以用super()来调用父类的构造方法
-
当一个构造方法第一行既没有this()又没有super()的时候,默认会有一个super();表示通过当前子类的构造方法调用父类的无参数构造方法。
class Animal{ public String name; int age; protected String sex; private String voice; public void setvoice(String voice){ this.voice = voice; } void saying(){ System.out.println(voice + "!!!"); } Animal(String name,int age){ this.name = name; this.age = age; } } class dog extends Animal{ dog(){ super("二哈",2); sex = "公"; setvoice("汪汪汪"); saying(); } } public class Test { public static void main(String[] args) { dog twoha = new dog(); System.out.println("大家好,我是" +twoha.name+",是一条"+twoha.sex+"狗"); } }
-
输出
汪汪汪!!! 大家好,我是二哈,是一条公狗
方法重写Override
-
方法重写指的是子类可以根据需要对从父类继承来的方法进行改写。
-
重写方法需和原来的方法有相同的方法名称、参数列表和返回值。
-
子类重写父类方法时,访问权限不能更低。
-
父类中私有方法不能被重写。
-
在子类可以通过super调用父类中被重写的方法
class Animal{ public String name; int age; protected String sex; private String voice; public void setvoice(String voice){ this.voice = voice; } void saying(){ System.out.println(voice + "!!!"); } Animal(String name,int age){ this.name = name; this.age = age; } } class Fox extends Animal{ void saying(){ System.out.println("谁能告诉我狐狸该怎么叫?"); } Fox(){ super("妲己",16); sex = "母"; } } public class Test { public static void main(String[] args) { Fox fox = new Fox(); System.out.println("大家好,我是" +fox.name+",是一条"+fox.age+"岁的"+fox.sex+"狐狸"); fox.saying(); } }
-
输出
大家好,我是妲己,是一条16岁的母狐狸 谁能告诉我狐狸该怎么叫?
❤️ 本回完! ❤️ ❤️ ❤️