继承
定义:继承是从已有的类在创建新类的过程
1.三大特征
2被继承的类称为父类(超类),继承父类的类称为子类(派生类)
3.继承是指一个对象直接使用另一对象的属性和方法
4.通过继承可以实现代码重用,2冗余,李氏替换原则
5.继承一个父类,只能继承非私有的数据(属性和方法)
语法:[访问权限] class 子类名 extends 父类名{
类体定义;
}
protected(受保护的访问权限修饰符,用于修饰属性和方法,使用protected修饰的属性和方法可以被子类继承)
class Dog{
private String name;
private String sex;
public void eat(){
System.out.println("吃饭");
}
}
class HomeDog extends Dog{
// 类的定义
}
class HuskyDog extends Dog{
// 类的定义
}
继承的限制:
1.Java只能实现单继承,也就是一个类只能有一个父类
2.允许多层继承,即:一个子类可以有一个父类,一个父类还可以有其他的父类
3.继承能继承非私有的属性和方法(显示继承:可以直接通过对象来操作),但私有的属性和方法也可以继承,但不可使用。(隐式继承:不可以通过对象来操作)
4.构造方法不能被继承
创建子类对象时,父类的构造方法也会被调用,为什么?
因为子类要使用父类的数据,那么就要通过父类的构造方法来初始化数据
如果创建子类对象时会调用父类的默认构造方法
继承小结
1.继承是发生在多个类之间
2.继承使用关键字extends
3.Java只能单继承,允许多层继承
4.被继承的类称为父类(超类),继承父类的类称为子类(派生类)
5.在父类的非私有属性和方法可以被子类继承
6.使用protected修饰的属性和方法可以被子类继承
7.构造方法不能被继承
8.创建对象会调用构造方法,调用构造方法不一定是创建对象
9.实例化子类对象,会先调用父类的构造方法,当父类中没有默认无参构造方法时,子类必需显示通过super(...)来调用父类的带参构造方法,只能在第一句。
好处:
1.代码复用性
2.维护性
3.让类与类之间产生关系,是多态的前提
缺点:
增强了类与类之间的耦合性
开发原则,高内聚,低耦合
在子类进行实例化操作的时候,首先会让其父类进行初始化操作。之后子类再进行实例化操作。
子类的实例化过程:
子类实例化时会先调用父类的构造方法
如果父类中没有默认的构造方法,在子类的构造方法中必需显示的调用父类的构造方法
结论:
构造方法只是用于初始化类中的字段
以及执行一些初始化代码
调用构造方法并不代表会生public, protected, friendly, private的访问权限如下:
关键字 当前类 同一package 子孙类 其他package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
不写时默认为friendly
public声明的变量及方法,表明在整个包内包外都可使用。
private 声明的变量及方法,只在声明的类内可以使用。
protected包外不可使用。包内可以使用。
不使用关键字默认为包内使用。