Java基础之多态


tip:以下是正文部分

一、多态的基本介绍

方法或对象具有多种形态。是面向对象的第三大特征。
多态是建立在封装和继承的基础上的

二、方法的多态

重写和重载体现多态

三、对象的多态

1.对象的编译类型和运行类型可以不一样(也可以一样)

animal ani = new animal();
animal ani = new cat();

2.对象的编译类型在定义对象是就决定了,不能改变。

3.运行类型是可以改变的。

4.编译类型看=左边,运行类型看=右边

animal ani = new cat();
//编译类型为 animal
//运行类型为 cat

四、多态的细节

多态的前提是:两个对象(类)存在继承关系

五、多态中的向上转型

1.本质: 父类的引用指向了子类的对象

2.语法: 父类类型 引用名 = new 子类类型()

3.可以调用父类中的所有成员(需遵守访问权限)

4.不能调用子类中特有成员: (因为在编译阶段,编译类型为父类,无法找到子类的方法)

5.最终运行效果看子类的具体实现 (符合继承中查找方法的规则)

六、多态中的向下转型

1.语法:子类类型 引用名 = (子类类型) 父类引用

2.只能强转父类的引用,不能强转父类的对象
相当于只能转变父类的运行类型,不能转变编译类型

3.要求父类的引用必须指向的是当前目标类型的对象
相当于需要是父类和子类的关系

4.可以调用子类类型中所有的成员

七、多态中的属性

属性没有重写之说!属性的值看编译类型

public class main {
    public static void main(String[] args) {
        a a = new b();
        System.out.println(a.num);//10
    }
}
class a{
    int num = 10;
}
class b extends a{
    int num = 20;
}

八、instanceOf( )

判断对象的运行类型是否为XX类型或XX类型的子类型

public class main {
    public static void main(String[] args) {
        a a = new b();
        System.out.println(a instanceof b);//true
        System.out.println(a instanceof a);//true
        System.out.println(a instanceof Object);//true
    }
}
class a{
    int num = 10;
}
class b extends a{
    int num = 20;
}

九、动态绑定机制

1.当调用对象方法的时候,该方法会和该对象的( 内存地址/运行类型 )绑定。

public class main {
    public static void main(String[] args) {
        a a = new b();
        System.out.println(a.add()); // 30
    }
}
class a{
    int num = 10;
    public int add(){
        return getNum() + 10;
    }
    public int getNum() {
        return num;
    }
}
class b extends a{
    int num = 20;

    @Override
    public int getNum() {
        return num;
    }
}

2.当调用对象属性时,没有动态绑定机制,哪里声明,哪里使用。

public class main {
    public static void main(String[] args) {
        a a = new b();
        System.out.println(a.add()); //20
    }
}
class a{
    int num = 10;
    public int add(){
        return num + 10;
    }
}
class b extends a{
    int num = 20;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值