JAVA的多态

来源:互联网 发布:例程单片机 编辑:程序博客网 时间:2024/05/18 01:08

1.Java引用变量有两个类型:一个是编译时的类型,一个是运行时的类型。编译时的类型由声明该变量时使用的类型所决定,而运行时的类型由实际赋给该变量的对象所决定。如果编译时类型和运行时类型不一致,就会出现所谓的多态(看成向上转型???)

class BaseClass {public int book=6;public void base(){System.out.println("父类普通方法");}public void test(){System.out.println("父类被覆盖的方法");}}public class SubClass extends BaseClass{public String book="fuck";public void test(){System.out.println("子类覆盖父类的方法");}public void sub(){System.out.println("子类普通方法");}public static void main(String[] args){//编译时类型=BaseClass,运行时类型=SubClass实现多态BaseClass bc=new SubClass();System.out.println(bc.book);bc.base();bc.test();}}

2.该引用变量bc,在编译阶段只能调用编译时类型所具有的方法,而运行时则执行它运行时类型所具有的方法,所以引用变量只能调用声明该变量时所用类里包含的方法。(bc.sub()将报一个错误,编译时会提示找不到符号sub())

3.与方法不同,变量并不具有多态性,所以book输出的是6,输出的是父类中的实例变量

4.通过引用变量来访问实例属性,系统总是试图访问它编译时类所定义的属性

5.JAVA可以很好的实现向上转型(将一个子类的实例赋给父类的引用变量),但是如果想实现向下转型(将一个父类的实例赋给子类的引用变量)就需要进行强制转型(type)variable

6.在强制转型之前,一般需要通过instanceof的判断。instanceof的前一个操作符一般是引用型变量,后一个操作符一般是一个类。它用于判断前面的对象是否是后面类或子类的实例

public class instance {public static void main(String[] args) throws Exception{//Object是String的父类Object hello="hello"; if(hello instanceof String){String obj=(String)hello;System.out.println(obj);}}}


0 0
原创粉丝点击