java学习日记 多态性

Posted 橘子酱ing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java学习日记 多态性相关的知识,希望对你有一定的参考价值。

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学习日记 多态性的主要内容,如果未能解决你的问题,请参考以下文章

Java学习日记 week3 面向对象2:封装,继承,多态

java中封装,继承,多态,接口学习总结

java 代码片段

java学习日记(8-13)

java学习日记

java学习日记-基础-字符串内容替换