java学习笔记(三)继承多态

继承

在这里插入图片描述
在这里插入图片描述

成员变变量访问,就近原则
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

重写的本质:(覆盖虚方法表)

在这里插入图片描述
3举例:dog继承animal
animal有一个方法 public animal method()
dog重写的方法可以是 public animal method()也可以是 public dog method()
在这里插入图片描述

继承内存图

加载字节码文件到方法区中时,会把父类也加载进来

在子类创建对象时,堆中有一部分是父类继承下来的成员变量,一部分是自己的成员变量,使用时先查找自己的成员变量,再查找继承的成员变量

方法区还有一个object类,这里没有画出来
在这里插入图片描述

虚方法

在这里插入图片描述

先加载方法区,方法区中的"所有的成员变量"未画出。

object类共有5个虚方法

fu.class共有6个虚方法(其中private的成员方法不是虚方法)

zi.class的虚方法表共有7个虚方法(自己的1个)

在这里插入图片描述

小结

在这里插入图片描述

多态

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

Person类(day04 demo2)

package com.study.demo2;

public class Person {
    private String name;
    private int age;

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

//    行为:
//    keepPet(Dog dog,String something)方法
//    功能:喂养宠物狗,something表示喂养的东西
//    行为:
//    keepPet(Cat cat,String something)方法
//    功能:喂养宠物猫,something表示喂养的东西
//    生成空参有参构造,set和get方法

//    public void  keepPet(Dog dog,String something){
//        System.out.println("年龄为"+getAge()+"岁的"+getName()+"养了一只"+dog.getColor()+"的狗");
//        dog.eat(something);
//    }
//
//    public void  keepPet(Cat cat,String something){
//        System.out.println("年龄为"+getAge()+"岁的"+getName()+"养了一只"+cat.getColor()+"的猫");
//        cat.eat(something);
//    }

    public void  keepPet(Animal animal,String something){
        if (animal instanceof Dog){
            Dog dog=(Dog) animal;
            System.out.println("年龄为"+getAge()+"岁的"+getName()+"养了一只"+animal.getColor()+"的狗");
            dog.eat(something);
        }
        else if (animal instanceof Cat){
            Cat cat=(Cat) animal;
            System.out.println("年龄为"+getAge()+"岁的"+getName()+"养了一只"+animal.getColor()+"的猫");
            cat.eat(something);
        }

    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置
     * @param age
     */
    public void setAge(int age) {
        this.age = age;
    }

    public String toString() {
        return "Person{name = " + name + ", age = " + age + "}";
    }
}


测试类test

package com.study.demo2;

public class test {
    public static void main(String[] args) {
        Person person = new Person("老王",30);
        Person person1 = new Person("老李",25);

        Dog dog=new Dog("a",2,"black");
        Cat cat=new Cat("a",3,"grey");

        person.keepPet(dog,"骨头");
        person1.keepPet(cat,"fish");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值