继承
2022-02-07 本文已影响0人
雪燃归来
继承: 继承是从已有的类创建新类的过程
java只支持单继承
构造方法不能被继承
创建子类的对象时, 父类的构造方法也会被调用,为什么?
因为子类要使用到父类的数据,那么就要通过父类的构造方法来初始化数据
创建子类对象时会调用父类的默认构造方法
一、认识继承
1、继承一个父类,只能继承非私有的数据(属性和方法)
class Dog{
private String name;
private String sex;
public void eat(){
System.out.println("吃饭");
}
}
class HomeDog extends Dog{
public void print(){
System.out.println(name + "我是一只家狗, wangwang");
}
}
class HuskyDog extends Dog{
public void show(){
System.out.println(name+ "我是husky,我能跳舞");
}
}
private修饰的属性不能被继承
2、protected访问权限修饰符,在继承关系中使用,在父类中使用protected修饰的属性或方法可以被子类继承
public class Test1 {
public static void main(String[] args) {
HomeDog homeDog = new HomeDog("旺财");
homeDog.print();
}
}
class Dog{
protected String name;
private String sex;
public Dog(){
System.out.println("我是Dog的构造方法");
}
public Dog(String name){
this.name = name;
System.out.println("这个会被执行吗?");
}
public void eat(){
System.out.println("吃饭");
}
}
class HomeDog extends Dog{
public HomeDog(String name){
this.name = name;
System.out.println("我是HomeDog的构造方法");
}
public void print(){
System.out.println(name + "我是一只家狗, wangwang");
}
}
class HuskyDog extends Dog{
public HuskyDog(){
System.out.println("我是HuskyDog的构造方法");
}
public void show(){
System.out.println(name+ "我是husky,我能跳舞");
}
}
二、继承的特点
1、继承是发生在对歌类之间的
2、继承使用关键字 extends
3、JAVA只支持单继承,允许多层继承
4、被继承的类叫父类(超类),继承父类的类叫子类(派生类)
5、在父类中的非私有属性和方法可以被子类继承
6、protected(受保护的访问权限修饰符),修饰的属性和方法可以被子类继承
7、构造方法不能被继承
8、创建对象会调用构造方法,调用构造方法不一定是创建对象
9、实例化子类对象,会先调用父类的构造方法,如果父类中没有默认的构造方法,那么子类必须显式的通过super(...)来调用父类的带参构造方法,super也只能放在在子类构造方法中第一句。
public class Test1 {
public static void main(String[] args) {
HomeDog homeDog = new HomeDog("旺财");
homeDog.print();
}
}
class Dog{
protected String name;
private String sex;
public Dog(String name, String sex){
this.name = name;
this.sex = sex;
System.out.println("这个会被执行吗?");
}
public void eat(){
System.out.println("吃饭");
}
}
class HomeDog extends Dog{
public HomeDog(String name){
super(name, "公"); // 只能出现在第一句
System.out.println("我是HomeDog的构造方法");
}
public void print(){
System.out.println(name + "我是一只家狗, wangwang");
}
}
class HuskyDog extends Dog{
public HuskyDog(){
super("husky", "母");
System.out.println("我是HuskyDog的构造方法");
}
public void show(){
System.out.println(name+ "我是husky,我能跳舞");
}
}
三、继承的好处
1、提高代码的可用性
2、提高代码的维护行
3、让类与类之间产生关系,是多态的前提
四、继承的缺点
增强了类与类之间的耦合性