Java中的继承
继承是面向对象的三大特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法。
继承是指在原有类的基础上,进行功能扩展,创建新的类型。
继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模。 JAVA中类只有单继承,没有多继承! 继承是类和类之间的一种关系。除此之外,类和类之间的关系还有依赖、组合、聚合等。 继承关系的两个类,一个为子类(派生类),一个为父类(基类)。子类继承父类,使用关键字extends来表示。 子类和父类之间,从意义上讲应该具有"is a"的关系。 extends的意思是“扩展”,子类是父类的扩展。
继承中子类的特点:
子类可以有父类的内容,子类还可以有自己特有的内容。
例如:创建一个父类Person
// 父类 public class Person { //public 公共的 public int money = 1_0000_0000; public void say(){ System.out.println("说话"); } }
创建一个子类Student
//student is person //Teacher student也叫派生类或者子类 //子类可以继承父类的所有方法 public class Student extends Person{ }
创建一个测试Application类
public class Application { public static void main(String[] args) { Student student = new Student(); student.say(); System.out.println(student.money); } }
继承的优缺点
继承好处:
实现了数据和方法的共享 提高了代码的复用性(多个类相同的成员可以放到同一个类中) 提高了代码的维护性(如果方法的代码需要修改,修改一处即可) 提高了代码的可扩展性
继承的弊端:
继承让类与类之间产生了关系,类的耦合性增强了,当父类发生变化时子类实现也不得不跟看变化,削弱了子类的独立性
继承中构造方法的访问特点
子类中所有的构造方法默认都会访问父类中无参的构造方法。
-
因为子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化之前,一定要先完成父类数据的初始化
-
每一个子类构造方法的第一条语句默认都是: super()
创建一个父类Fu
public class Fu { public Fu() { System.out.println("Fu中无参构造方法被调用"); } public Fu(int age) { System.out.println("Fu中带参构造方法被调用"); } }
创建一个子类Zi
public class Zi extends Fu { public Zi() { // super(); System.out.println("Zi中无参构造方法被调用"); } public Zi(int age) { // super(); System.out.println("Zi中带参构造方法被调用"); } }
测试:Test
public class Test { public static void main(String[] args) { Zi z = new Zi(); System.out.println("-------------------"); Zi zi = new Zi(18); } }
私有方法不能被重写(父类私有成员子类是不能继承的)
子类方法访问权限不能更低(public>默认>私有)
Java中类只支持单继承,不支持多继承
Java中类支持多层继承