Java多态知识整理

一、多态

多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同操作。

二、优点

1.消除类型之间的耦合关系

2.可替换性

3.可扩充性

4.接口性

5.灵活性

6.简化性

三、条件

1.继承(或实现接口)

2.重写

3.父类引用指向子类对象

四、实例

例1:

//定义父类
public class Father {
    //定义方法
    public void fun(){
        System.out.println("我是父类中的方法!");
    }

}
//定义子类,继承父类
class Son extends Father{
    //重写父类中的方法
    @Override
    public void fun() {
        System.out.println("我是重写后的方法!");
    }
}
//测试类
class Test{
    public static void main(String[] args){
        //多态体现,父类引用指向子类对象
        Father f = new Son();
        //调用重写后的方法
        f.fun();
    }
}

注意:

1.当使用多态方式(父类引用)调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。

2.当使用多态方式(父类引用)调用成员变量时,首先检查父类中是否定义了该变量,如果没有,编译错误,如果有,使用父类定义的成员变量。

例2:

//定义父类
public class Father_2 {
   //父类中的成员变量
    int a = 10;
}
//定义子类,继承父类
class Son_2 extends Father_2{
   //子类中的成员变量
    int a = 12;
}
//测试类
class Test_2{
    public static void main(String[] args){
        //多态体现
        Father_2 f2 = new Son_2();
        //调用成员变量,结果输出的时父类中的成员变量
        System.out.println(f2.a);
    }
}

五、向上、向下转型

向上转型:

当有子类对象赋值给一个父类引用时,便是向上转型,多态的本身其实就是向上转型的过程。

向下转型:

一个已经向上转型的子类对象,使用强制类型转换,将父类引用转换为子类引用,这个过程称之为向下转型。(直接创建父类对象,无法向下转型)

想要使用子类的成员变量或其特有的方法,需要使用到向下转型。

例:

//定义父类
public class Father_3 {
   //父类中的成员变量
    int a = 10;
    //定义方法
    public void fun(){
        System.out.println("我是父类中的方法!");
    }
}
//定义子类,继承父类
class Son_3 extends Father_3{
   //子类中的成员变量
    int a = 12;
    //重写父类中的方法
    @Override
    public void fun() {
        System.out.println("我是重写后的方法!");
    }
    //子类特有的方法
    public  void fun_2(){
        System.out.println("我是子类特有的方法!");
    }
}
//测试类
class Test_3{
    public static void main(String[] args){
        //多态体现,此过程为向上转型
        Father_3 f3 = new Son_3();
        //向下转型,强制转换
        Son_3 s3 = (Son_3)f3;
        //调用子类特有的成员
        s3.fun_2();
        System.out.println(s3.a);
    }
}

六、instanceof运算符

instanceof是一个比较运算符,它用来判断一个引用类型是否属于某个类型(要有继承和实现关系)的对象。

例:
 

//定义“人”类
public class Person {

    public  void eat(){
        System.out.println("人都要吃饭!");
    }

}
//定义“我” 类,继承“人”类
class My extends Person{

    public void eat(){
        System.out.println("我是人,我也要吃饭!");
    }

}
//定义测试类
class Test_4{
    public static void main(String[] args) {
        //多态体现
        Person p = new My();
        //判断p 是否属于Person类型
        if (p instanceof Person) {
            System.out.println(true);
        }
        //判断p 是否属于 My 类型
        if (p instanceof My) {
            System.out.println(true);
        }
    }
}

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值