JavaSE《继承多态上》详解

1.1什么为继承??

继承其实继承就是对共性的抽取

/**
 *比如狗和猫都有名字和姓名,都吃饭
 * 
 * 
 * 
 */
class Dog{
    public String name;
    public int age;
    public void eat(){
        System.out.println(name+" 正在吃饭");
    }
    public void bark(){
        System.out.println(name+" 正在汪汪!!!");
    }
}
class Cat{
    public String name;
    public int age;
    public void eat(){
        System.out.println(name+" 正在吃饭");
    }
    public void miaomaio(){
        System.out.println(name+"正在喵喵瞄!!!");
    }
}

所以上面那个,就可以对他们的共性进行抽取

/**
 *此时我们就可以用子类( Dog)extends父类(Animal)继承他们的共性从而让代码变简洁,
 *代码也可以复用
 * 
 * 
 */
class Animal{
    public String name;
    public int age;
    
    public void eat(){
        System.out.println(name+" 正在吃饭");
    }
}

class Dog extends Animal{
    public int weight;//体重

    public void eat(){
        System.out.println(name+" 正在吃饭");
    }
    public void bark(){
        System.out.println(name+" 正在汪汪!!!");
    }
}
class Cat extends Animal{

    public void miaomaio(){
        System.out.println(name+"正在喵喵瞄!!!");
    }
}

/**
 *此时我们就可以调用父类的方法,变量用于子类。(共性进行抽取)
 *当然猫的也可以
 */
public class Test {
    public static void main(String[] args) {
        Dog dog=new Dog();
        dog.name="狗子";
        dog.age=3;
        dog.eat();
        dog.bark();
    }

}

在这里插入图片描述

​ ⚫此时他们的内存是这样的

在这里插入图片描述

2.1我们如何访问子类和父类同名成员变量???
/**
 *
 */
class Base{
    public int a=1;
    public int b=2;
    
}
class Date extends Base{
    public int a=11;
    public int c=4;
    public void test(){
 //我们可以用关键字super来调用父类的成员(super代表的是子类从父类继承过来的数据)
        System.out.println("调用父类的a "+super.a);//
        System.out.println("调用子类的a "+a);//自己有就优先访问自己的a(就近原则);

    }
}

2.2如何调用相同的父类的成员方法
class Base{
    public void add1(){
        System.out.println("Base:当中的成员方法");
    }

}
class Date extends Base{
    public void add1(){
        System.out.println("Date:当中的成员方法");
    }
    
    public void test(){
        add1();//这个也是就近原则子类有优先调用自己的没有在找父类的
        super.add1();//用super来调用父类的

    }
}

public class Test2 {
    public static void main(String[] args) {
        Date date=new Date();
        date.test();
    }

}

在这里插入图片描述

2.3super关键字

该关键字主要作用:在子类方法中访问父类成员

3.1父类构造方法提供后子类也要重新提供构造方法???
class Animal{
    public String name;
    public int age;

    public Animal(String name, int age) {//父类提供一个构造方法
        this.name = name;
        this.age = age;
    }

    public void eat(){
        System.out.println(name+" 正在吃饭");
    }
}
class Dog extends Animal{
    public int weight;

    public Dog(String name, int age) {
 //因为父类提供构造方法了所以我们要用super来初始化父类的数据
        super(name, age);//super要在第一行不然会报错
    }

    public void eat(){
        System.out.println(name+" 正在吃饭");
    }
    public void bark(){
        System.out.println(name+" 正在汪汪!!!");
    }
}

注意:当父类没有构造方法时,子类会默认提供无参的构造方法初始化 如下

class Dog extends Animal{
    public int weight;

    public Dog() {
        super();//super要在第一行不然会报错
    }

    public void eat(){
        System.out.println(name+" 正在吃饭");
    }
    public void bark(){
        System.out.println(name+" 正在汪汪!!!");
    }
}

1.0代码块的执行顺序
class Animal{
    public String name;
    public int age;

    {
        System.out.println("Animal:>>>实例代码块");
    }
    static {
        System.out.println("Animal:>>静态代码块");
    }
    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("Animal:>>构造代码块");
    }
}
class Dog extends Animal{
    public int weight;
    {
        System.out.println("Dog:>>>实例代码块");
    }
    static {
        System.out.println("Dog:>>静态代码块");
    }

    public Dog(String name, int age) {
        super(name, age);//在这里要执行父类的代码块
        System.out.println("Dog:>>构造代码块");
    }
}
public class Test {
    public static void main(String[] args) {
    Dog dog=new Dog("小狗",3);//运行后执行顺序如下
    }

在这里插入图片描述

注意:静态代码块是先被执行的且只执行一次

且代码块都是先静态在实例,后构造

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值