• 接口和多态


    子类  继承 父类

    实现类  接口 (多态)


    为什么要用接口引用指向实现类的对象

    List list;是在栈区开辟一个空间放list引用,并没有创建对象所以不知道ArrayList还是LinkedList当你list= new ArrayList(); 就创建了ArrayList对象。并且把开始创建的list引用指向这个对象ArrayList和LinkedList都是List的实现类。

    为什么一般都使用 List list = new ArrayList() ,而不用 ArrayList alist = new ArrayList()呢? 

    问题就在于List接口有多个实现类,如 LinkedList或者Vector等等,现在你用的是ArrayList,也许哪一天你需要换成其它的实现类呢?,这时你只要改变这一行就行了:List list = new LinkedList(); 其它使用了list地方的代码根本不需要改动。假设你开始用 ArrayList alist = new ArrayList(), 这下你有的改了,特别是如果你使用了 ArrayList特有的方法和属性。 ,如果没有特别需求的话,最好使用List list = new LinkedList(); ,便于程序代码的重构. 这就是面向接口编程的好处(OOP/AOP)

    注意事项

    list只能使用ArrayList中已经实现了的List接口中的方法,ArrayList中那些自己的、没有在List接口定义的方法是不可以被访问到的

    list.add()其实是List接口的方法

    但是调用ArrayList的方法如 clone()方法是调用不到的


    interface A{
    	public void say();
    }
    
    class B implements A{
    	@Override
    	public void say(){
    		System.out.println(123456789);
    	}
    	public void sayHello(){
    		System.out.println(123);
    	}	
    }
    public class T {	
    	public static void main(String args[]){
    		B b = new B(); // 子类是父类的实例,这就像是说 鱼是动物        
    		b.say();
    		b.sayHello();
    		A a = b; //自动类型转换 Upcasting是自动进行转换的,就像 Object O = b;//也是可以自动进行的 B is Object
    		a.say();	
    		System.out.println(b instanceof B); //true
    		System.out.println(a instanceof A); //true
    		
    	}
    
    }
    

     Upcasting,上溯造型,有的书译作“向上转型”,是实现Java多态(Polymorphism) 的基石。

    Casting指的是对象之间类型的转换。

    将一个对象的引用(Object Reference)看作其父类对象的引用(Reference to base type)叫做

    Upcasting(上溯造型或向上转型)。


    
    
    
  • 相关阅读:
    报错注入验证sqli
    pycharm out of memory 闪退
    集群、分布式、负载均衡区别与联系
    如何获取线程池ThreadPoolExecutor正在运行的线程
    docker快速安装mysql
    基于guava实现本地缓存
    NIO selector 多路复用reactor线程模型
    网络编程之NIO
    网络编程之BIO
    反射性能研究,反射赋值与set方法赋值对比
  • 原文地址:https://www.cnblogs.com/cs-lcy/p/7351828.html
Copyright © 2020-2023  润新知