继承
继承:在已有类的功能上继续进行功能的扩充。
继承的目的:子类可以重用父类中的结构,可以实现功能的扩充,子类可以定义比父类更多的内容,描述的范围可以更小。
class 子类 extends 父类 {}
//了解继承的概念
class Person{ private String name; private int age; public void setName(String name){ this.name = name; } public void setAge(int age){ this.age = age; } public String getName(){ return this.name; } public int getAge(){ return this.age; } public String getInfo(){ return "name = " + this.name + "\n" + "age = " + this.age; } public Person(){} public Person(String name, int age){ this.name = name; this.age = age; } } //继承Person类,且不定义任何新的功能 class Student extends Person{} public class Demo{ public static void main(String args[]){ Student std1 = new Student(); //实例化一个Student对象 std1.setName("韩梅梅"); //调用setName()方法。这个方法继承自Person类 std1.setAge(25); System.out.println(std1.getInfo()); } } /*------------------------------------------ E:\Javacode>javac Demo.java E:\Javacode>java Demo name = 韩梅梅 age = 25 E:\Javacode>*/
//子类进行实例化的时候一定会先实例化父类对象 class Person{ public Person(){ System.out.println("Person类实例化!"); } } class Student extends Person{ public Student(){ System.out.println("Student类实例化!"); } } public class Demo{ public static void main(String args[]){ Student std = new Student(); } } /*--------------------------------------------- E:\Javacode>java Demo Person类实例化! Student类实例化! E:\Javacode>*/
super()--表示子类构造方法调用父类的构造,只允许放在构造方法的首行。
class Student extends Person { public Student(){ super(); //写不写的效果一样,实例化父类对象 System.out.println("一个新的Student对象产生"); } }
如果父类没有提供无参构造,则必须利用 super() 明确调用有参构造
class Student extends Person { private String school; public Student(String name, int age, String school){ super(name,age); this.school = school; } public void setSchool(String school){ this.school = school; } public String getSchool(){ return this.school; } public String getInfo(){ return "school =" + this.school; } }
继承的限制:
1. Java中不允许出现多重继承,只允许多层继承。
//错误的继承 class A{} class B{} class C extends A,B{} //正确的继承 class A{} class B extends A{} class C extends B{}
2. 在继承关系定义的时候,子类实际上可以继承父类中所有的操作结构,但是对于私有操作属于隐式继承(不能直接访问),非私有操作属于显示继承。
3. 继承一旦发生,所有的操作就都可以被子类使用。