码迷,mamicode.com
首页 > 编程语言 > 详细

java学习日记 多态性

时间:2020-06-22 10:50:07      阅读:47      评论:0      收藏:0      [点我收藏+]

标签:bsp   lan   自己的   之间   参数类型   demo   inf   fun   建立   

1、多态性严格来讲有两种描述形式:。

  • 方法的多态性:

  |- 方法的重载:同一个方法名称,会根据传入参数的类型及个数不同执行不同的方法。

  |- 方法的覆写:同一个方法,会根据子类的不同,实现不同的功能。

  • 对象的多态性:指的是发生在继承关系类之中,子类和父类之间的转换

  |- 向上转型(自动完成):父类 父类对象=子类实例;。

  |- 向下转型(强制完成):子类 子类对象=(子类)父类实例;。

 2、向上转型

class A{
    int age =10;
    public void fun(){
        print();
    }
    public void print(){
        System.out.println("A");
    }
}

class B extends A{
    int age = 100;
    public void print(){
        System.out.println(this.age);
        System.out.println(super.age);
    }
}
public class ExtendsDemo1 {
    public static void main(String[] args) {
        A a = new B();
        a.print();
    }
}

运行结果:

100
10

3、向下转型

public class ExtendsDemo1 {
    public static void main(String[] args) {
        A a = new B();
        B b = (B) a;  //向下转型
        b.print();
    }
}

运行结果:

100
10

向上转型的意义是参数的统一。

技术图片

 

参数统一后,可以调用子类覆写的方法。

向下转型指的是父类调用子类自己的特殊方法。

对于数据的操作分为两步,(1)设置数据(保存数据),需要向上转型统一数据类型。(2)取出数据。

对于对象的转型,给出以下的经验总结:

●80%的情况下都只会使用向上转型,因为可以得到参数类型的统一。

5%的情况下会使用向下转型,目的是调用子类的特殊方法;。

●15%的情况下是不转型,例如: String。

个性化的操作在-一个标准的开发之中应该尽量少出现,因为对象的转型操作里面存在安全隐患。

 

 4、观察如下代码:

class A{
    public void print(){
        System.out.println("A");
    }
}

class B extends A{
    public void print(){
        System.out.println("B");
    }
}
public class ExtendsDemo1 {
    public static void main(String[] args) {
        A a = new A();
        B b = (B) a;
        b.print();
    }
}

运行报错:

Exception in thread "main" java.lang.ClassCastException: com.hengqin.test1.A cannot be cast to com.hengqin.test1.B
    at com.hengqin.test1.ExtendsDemo1.main(ExtendsDemo1.java:17)

类转换异常,两个没有关系的类强行发生了向下转型。

学习instanceof 关键字

class A{
    public void print(){
        System.out.println("A");
    }
}

class B extends A{
    public void print(){
        System.out.println("B");
    }
}
public class ExtendsDemo1 {
    public static void main(String[] args) {
        A a1 = new A();
        System.out.println(a1 instanceof A);
        System.out.println(a1 instanceof B);

        A a = new B();
        System.out.println(a instanceof A);
        System.out.println(a instanceof B);
        if (a instanceof B){//如果a对象是B类的实例
            B b = (B) a;
            b.print();
        }
    }
}

运行结果:

true
false
true
true
B

对于向下转型,一定要先发生向上转型,建立关系后才能发生。

java学习日记 多态性

标签:bsp   lan   自己的   之间   参数类型   demo   inf   fun   建立   

原文地址:https://www.cnblogs.com/cathycheng/p/13158974.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!