文章目录
- 一、继承概述
- 二、内存运行原理 ★
- 三、继承的特点
- 四、继承后:成员变量和方法的访问特点
- 五、继承后:方法重写
- 六、继承后:子类构造器的特点
- 七、继承后:子类构造器访问父类有参构造器
- 八、this、super 总结
一、继承概述
Java 允许一个类通过 extends 关键字与另一个类建立父子关系,这就是继承。
格式: 子类 extends 父类
特点: 子类继承父类后,就可以得到父类的属性和行为。
优点: 提高代码的复用性,多个子类的相同代码可以放在父类中,增强了类的扩展性。
设计规范: 子类共用属性和行为放在父类,子类独有属性和行为放在子类自己那里。
二、内存运行原理 ★
public class People{private String name;private int age;/*** 共同行为*/public void queryCourse(){System.out.println(name + "查看课表信息!!");}// getter + setter
}public class Student extends People{private String className;/*** 独有行为*/public void writeInfo(){System.out.println(getName()+" 写作业!!");}// getter + setter
}
public class Test{public static void main(string[] args){Student s = new Student();s.setName("翠花"); // 父类的s.setAge(22); // 父类的s.setclassName("Java就业999期");// 子类的s.queryCourse(); // 父类的s.writeInfo(); // 子类的}
}
学生对象内存图如下:
三、继承的特点
-
子类可以继承父类的属性和行为,但是 子类不能继承父类的构造器。
-
子类可以继承父类私有成员吗?
有争议,我认为可以,只是不能直接访问。可通过访问父类的方法,间接访问父类私有成员。 -
子类可以直接用子类名访问父类静态成员。那么子类继承了父类静态成员吗?
我认为没有继承,只能可以共享的去访问父类静态成员,共享并非继承。 -
Java是单继承模式:一个类只能继承一个直接父类。反证法如下:
-
Java 不支持多继承,但是支持多层继承。
-
Java 中所有的类都是 Object 类的子类。
四、继承后:成员变量和方法的访问特点
采用:就近原则
this.子类自己的成员变量; super.父类成员变量/父类成员方法(父类成员是public)
public class Animal{public String name = "动物的名字";public void run(){System.out.println("动物可以跑~~");}
}public class Dog extends Animal{public String name = "狗的名字";public void run(){System.out.println("狗可以跑~~");}public void showName(){String name = "临时的名字";System.out.println(name); // 访问局部变量nameSystem.out.println(this.name); // 访问子类name。如果没有同名临时变量,name就是子类 name,不用加 thisSystem.out.println(super.name); // 访问父类namesuper.run(); // 访问父类run(); // 访问子类}
}
public class Test {public static void main(String[] args) {// 目标:理解继承后成员的访问特点:就近原则Dog dog = new Dog();dog.run(); // 狗可以跑~~dog.showName();}
}
五、继承后:方法重写
六、继承后:子类构造器的特点
七、继承后:子类构造器访问父类有参构造器
八、this、super 总结
注意:
子类通过 this(…)
去调用本类的其他构造器,本类其他构造器会通过 super
去手动调用父类的构造器,最终还是会调用父类构造器。
super(…)
必须放在第一行,this(…)
也必须在第一行,因此二者不能共存一个构造器中。
文章参考:Java入门基础视频教程,java零基础自学就选黑马程序员Java入门教程(含Java项目和Java真题)