继承
- 什么是继承?
继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力
Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。
- 继承的特点
- 继承关系是传递的。若类C继承类B,类B继承类A(多层继承),则类C既有从类B那里继承下来的属性与方法,也有从类A那里继承下来的属性与方法,还可以有自己新定义的属性和方法。继承来的属性和方法尽管是隐式的,但仍是类C的属性和方法。继承是在一些比较一般的类的基础上构造、建立和扩充新类的最有效的手段。
- java只支持单继承,即一个子类只允许有一个父类,但是一个父类可以有多个子类。
- 继承提供了软件复用功能。若类B继承类A,那么建立类B时只需要再描述与基类(类A)不同的少量特征(数据成员和成员方法)即可。这种做法能减小代码和数据的冗余度,大大增加程序的重用性。
- 继承通过增强一致性来减少模块间的接口和界面,大大增加了程序的易维护性。
- 提供多重继承机制。从理论上说,一个类可以是多个一般类的特殊类,它可以从多个一般类中继承属性与方法,这便是多重继承。Java出于安全性和可靠性的考虑,仅支持单重继承,而通过使用接口机制来实现多重继承。
- 子类是不继承父类的构造器(构造方法或者构造函数)的,它只是调用(隐式或显式)。
如果父类的构造器带有参数,则必须在子类的构造器中显式地通过super关键字调用父类的构造器并配以适当的参数列表。
如果父类构造器没有参数,则在子类的构造器中不需要使用super关键字调用父类构造器,系统会自动调用父类的无参构造器。- 不能继承夫类私有的方法和属性
- 子类可以重写父类的方法,但权限不能降低
- Object类:所以的类都默认或直接继承Object类
- 继承实例
//父类
public class Person {
//私有属性不能被继承,但是可以通过get set方法来操作
private int money=10000;
public int age;
public int weight=100;
public static void talk(){
System.out.println("啊");
}
}
//子类
//关键词extends,扩展,继承的意思,扩展父类没有的属性和方法,继承父类拥有的属性和方法
public class Student extends Person {
//父类没有的方法
public void eat() {
System.out.println("吃");
}
}
//测试类
public class Test {
public static void main(String[] args) {
Student student = new Student();
//由于子类继承了父类所有的public方法所以
//子类student的对象可以直接调用父类的talk方法
student.talk();
student.age=100;
System.out.println(student.age);
System.out.println(student.weight);
}
}