zoukankan      html  css  js  c++  java
  • java基础对象多态性!

    1.向上转型 
       将父类的对象转为子类对象。自动转换。
       通过其子类进行父类的实例化操作,则如果调用的方法被子类覆写过。
       则肯定是调用被覆写过的方法。
       注意点:
       转型后在子类中是无法找到在子类中定义的新方法的。
    2.向下转型
       将父类的对象转为子类对象。需要强制转换。
       在进行对象向下转型的时候。有一个注意点。
       如果两个没有关系的对象之间发生了转换了关系,则肯定出现此异常。
         
       注意 :要想产生对象的向下转型。则肯定是要先产生一个向上转型。

    3.对象的多态性的应用

    4.instanceof 关键字

    	class A{     // 定义类A
    		public void fun1(){  // 定义fun1()方法
    			System.out.println("A --> public void fun1(){}") ;
    		}
    		public void fun2(){
       			 this.fun1() ;  // 调用fun1()方法
    		}
    	};
    	class B extends A{
    		public void fun1(){  // 此方法被子类覆写了
    			System.out.println("B --> public void fun1(){}") ;
    		}
    		public void fun3(){
    			System.out.println("B --> public void fun3(){}") ;
    		}
    	};
    	class C extends A{
    		public void fun1(){  // 此方法被子类覆写了
    			System.out.println("C --> public void fun1(){}") ;
    		}
    		public void fun5(){
    			System.out.println("C --> public void fun5(){}") ;
    		}
    	};
    	public class InstanceofDemo02{
    		public static void main(String asrgs[]){
    			fun(new B()) ;
    			fun(new C()) ;
    		}
    		public static void fun(A a){
    			a.fun1() ;
    			if(a instanceof B){
    				B b = (B) a ;
    				b.fun3() ;
    			}
    			if(a instanceof C){
         				C c = (C) a ;
        				 c.fun5() ;
    			}
    		}
    	};

    在java 中可以使用instanceof 关键字来判断一个对象到底是那个类的实例。
         在开发中一定要注意,对于向下转型的操作最好增加instanceof验证。
         以保证转型时候不会发生ClassCastException
        
         要增加新的子类,肯定要修改fun 方法,这样一来就失去了灵活性。所以
         在程序的开发中重点在父类中。只要父类设计足够合理。则开发肯定会非常的方便。
         在开发中一定要记住以下一点:
         一个类永远不要去继承一个实现好的类。而只能去继承一个抽象类或接口。

    5.Object 类
         如果一个类在没有定义的时候没有指定继承的是那个类。则就是默认是继承Object类。
         对象在打印的时候是会默认去调去toString()方法的。

    6.包装类
         一切皆是对象。八大数据类型不是对象。
         所以将八大数据类型包装成包装类。
         如 
         基本数据类型      包装类
        int  ------------------------>Integer,    
       char ------------------------>Character,
       short------------------------>Short, 
       double ---------------------->Double,
       long ------------------------>Long,  
       float ----------------------->Float.
       boolean --------------------->Boolean, 
       byte ------------------------>Byte.

      此八大包装类所继承的父类不一定相同。

      装箱和拆箱
      
      装箱:将基本数据类型变成包装类。
      int x = 30 ;   
      Integer f = new Integer(x);   //装箱
      拆箱:将包装类变成基本数据类型。
      y = f.intValue();  //拆箱
      
      在JDK1.5 后有了自动的去装箱的自动的拆箱功能。
    7.匿名内部类

    	interface A{
    		public void printInfo() ; // 
    	}
    	class X {
    		public void fun1(){
    			this.fun2(new A(){
    				public void printInfo(){
    					System.out.println("Hello World!!!") ;
    				}
    			}
    		) ;
    		}
    		public void fun2(A a){
    			a.printInfo() ;
    		}
    	};
    	public class NoInnerClassDemo02{
    		public static void main(String args[]){
    			new X().fun1() ;  // 实例化X类的对象,并调用fun1()方法
    		}
    	};
    	其中的new A()只使用了一个,故可以去使用匿名内部类。
    1. 其中的new A()只使用了一个,故可以去使用匿名内部类。  
  • 相关阅读:
    条件运算符
    类型
    c#
    打印菱形
    关于隐藏控制器的导航条的问题
    怎么去掉Xcode工程中的某种类型的警告 Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'int32
    如何在导航条的button点击变换时,切换对应的控制器
    如何只选择一个
    重写TabBar遇到的按钮不显示的问题
    ASI和AFN的区别
  • 原文地址:https://www.cnblogs.com/yangzhi/p/3576619.html
Copyright © 2011-2022 走看看