【学习笔记】继承

本文详细介绍了Java中的继承概念,包括如何使用`extends`关键字实现类的继承,以及在子类中如何调用父类的构造方法。通过实例展示了`super`关键字的用法,用于在构造方法中调用父类的构造方法和在普通方法中调用父类方法。同时,文章还解释了方法重写和成员变量的不可重写性,强调了代码复用和类间关系的重要性。

继承: 在父类中定义的内容,在子类中可以直接使用,不需要再次定义,增强的程序的重用性.
1、关键字:extends

public class Test {
    public static void main(String[] args) {
        Dog dog1=new Dog();
        dog1.setName("viky");    
        dog1.setHealth(95);
        dog1.setStrain("二哈");
        System.out.println("名字:"+dog1.getName()    
                +"\n健康值:"+dog1.getHealth()
                +"\n品种:"+dog1.getStrain());        
    }

}
class Pet{
    private String name;
    private int health;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name=name;
    }
    public int getHealth() {
        return health;
    }
    public void setHealth(int health) {
        this.health=health;
    }
}
class Dog extends Pet{
    private String strain;
    public String getStrain() {
        return strain;
    }
    public void setStrain(String strain) {
        this.strain=strain;
    }
}

2、继承中的构造方法:
在创建子类对象时,会先调用父类的构造方法,再调用子类的构造方法.如果在子类构造方法中加入了super()会调用父类指定的构造方法.

如:

public class Test {
    public static void main(String[] args) {
        Dog dog2=new Dog();
    }

}
class Pet{
    public Pet() {
        System.out.println("父类无参构造方法");
    }
}
class Dog extends Pet{
    public Dog() {
        System.out.println("子类无参构造方法");
    }    
}

输出结果:

父类无参构造方法
子类无参构造方法

3、super关键字:  指代父类对象
(1)如果用在子类的构造方法, 可以调用父类的构造方法,但必须位于子类构造方法的第一条语句;

如:

    public Dog(String name,int health,String strain) {
        super(name,health);
        this.strain=strain;
    }


(2)如果用在子类的普通方法中,可以调用父类的方法,尤其是被子类重写的父类方法.

public class Test {
    public static void main(String[] args) {
        Dog dog1=new Dog("viky",95,"二哈");
        dog1.print();
    }
}
class Pet{
    private String name;
    private int health;
    public Pet(String name,int health) {
        this.name=name;
        this.health=health;
    }

    public void print() {
        System.out.println("名字:"+getName()+"\n健康值:"+getHealth());
    }
    public String getName() {
        return name;
    }
    public int getHealth() {
        return health;
    }
}
class Dog extends Pet{
    private String strain;
    public Dog(String name,int health,String strain) {
        super(name,health);
        this.strain=strain;
    }
    public void print() {
        super.print();
        System.out.println("品种:"+getStrain());
    }
    public String getStrain() {
        return strain;
    }
}

输出结果:

名字:viky
健康值:95
品种:二哈

    
4、方法重写:在父类和子类中,定义方法名、参数列表和返回值都一样的方法,完成方法重写.

如:

public class Test {
    public static void main(String[] args) {
        Dog dog1=new Dog("viky",95,"二哈");
        dog1.eat();
    }
}
class Pet{
    private String name;
    private int health;
    public Pet(String name,int health) {
        this.name=name;
        this.health=health;
    }
    public void eat() {
        
    }
}
class Dog extends Pet{
    private String strain;
    public Dog(String name,int health,String strain) {
        super(name,health);
        this.strain=strain;
    }
    public void eat() {
        System.out.println("狗狗喜欢吃骨头");
    }
}

输出结果:

狗狗喜欢吃骨头


5、成员变量不可以重写

public class Test {
    public static void main(String[] args) {
        Pet p1=new Dog("viky",95,"二哈");
        System.out.println(p1.num);
    }
}
class Pet{
    int num=10;
    private String name;
    private int health;
    public Pet(String name,int health) {
        this.name=name;
        this.health=health;
    }
}
class Dog extends Pet{
    int num=20;
    private String strain;
    public Dog(String name,int health,String strain) {
        super(name,health);
        this.strain=strain;
    }
}

输出结果:10

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值