Java语言基础之多态

多态指的就是重载和覆盖

Animal类:

package Com;

public abstract class Animal { //抽象类
	public String name;
	
	public void walk()
	{
		System.out.println(name+"..... Animal walk!!!");
	}
	
	
	public void howl()
	{
		System.out.println(" .....xxxxx.....");
	}
	// 规则 规范
	public abstract void howl2();  //  抽象方法
	
}

Cat类:

package Com;

public class Cat extends Animal{
	
	
	
	
	
	public void howl()
	{
		System.out.println("..... miaomiao!!!");
	}
	@Override
	public void howl2(){
		System.out.println("Cat howl2..... miaomiao!!!");
	}
}


Dog:

package Com;

public class Dag extends Animal{
	
	public void Swim()
	{
		System.out.println(".... swim....");
	}
	
	
	
	
	public void howl()
	{
		System.out.println(" wangwang");
	}
	@Override
	public void howl2(){
		System.out.println("Dog howl2  wangwang");
	}
}

Main:

package Com;

public class main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
      
		// 1
		// 用子类赋值给父类,父类animal调用的方法 是子类对象Dog()的方法howl()
		// 但是父类无法调用父类未声明子类已有的方法swim()
		Animal animal= new Dag();
		//animial.swim() 父类中未声明,但是子类中含有swim方法,这条语句无法实现
        animal.howl();  // 普通方法
        animal.howl2(); //  抽象方法
        
        // 2
        //
        getMsg(animal); // 传入的是对象dog();
        
        Dag dog = new Dag();
        dog.name="xiaohua";
        getMsg(dog);


	}
	public static void getMsg(Animal animial)
	{
			animial.howl();			
			
			if (animial instanceof Dag) //方法1:  判断Dag是不是animal 的子类
			{
				Dag dog= (Dag)animial;
				//animial.Swim(); 父类无法调用子类的方法,但是强制类型转换后可调用子类的方法Swim
				dog.Swim();
				
			}
			
			if (animial.getClass()== Dag.class)//方法2 : 判断Dag是不是animal 的子类
			{
				Dag dog= (Dag)animial;
				//animial.Swim(); 父类无法调用子类的方法,但是强制类型转换后可调用子类的方法Swim
				dog.Swim();
			}
	}
  
}

/**
 * 小结:
 * Java中的多态就是重载和覆盖
 * 重载:函数名相同,但是参数不同方法
 * 覆盖:使用子类赋值给父类的方式
 * 在覆盖的情况下,分为编译期(编译器在进行编译时的状态)和运行期(实际运行的状态)
 * 在运行期时,父类声明的方法在子类中同样也有相应声明并实现时,调用的是子类的方法。
 * 在编译期时,父类中的被staitc private final修饰和构造器都是调用父类的,不再进行调用子类的。 
 * */
 



你可能感兴趣的:(JAVA语言基础,多态,Java语言基础)