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()只使用了一个,故可以去使用匿名内部类。  
原文地址:https://www.cnblogs.com/yangzhi/p/3576619.html