多态以及多态运用带例子和解释(新手勿喷)

多态

多态,一个事务具备的不同形态就是多态

  • 实例:
    • 在教室,学习形态
    • 逛超市,顾客形态
    • 救落水孩子.英雄形态

对象的多态性

  • 多态前提

    • 要有继承,或者接口实现
    • 要方法的重写
    • 父类或者接口的引用变量指向子类或者实现类对象
  • 子类父类多态实现

  • public class PloymorphismTest {
    public static void main(String[] args) {
    	//实现子类继承父类,多态程序
    	//学生是一个人
    	//父类或者接口的引用变量指向子类或者实现类对象
    	//父类引用等于子类对象
    	 Person person=new Student();
    	 person.eat();
    }
    }
    
    
    public class Person {
         public void eat() {
        	 System.out.println("任吃");
         }
    }
    
    
    public class Student  extends Person{
        public void eat() {
    		System.out.println("学生吃");
    		
    	}
    }
    
  • 抽象类和子类

    public class PloymorphismTest {
    public static void main(String[] args) {
    	    //
    	Animal animal=new Cat();
    	animal.eat();
    }
    }
    
    
    public   abstract class Animal {
         public abstract  void eat() ;
    }
    
    
    ublic class Cat extends Animal {
        public void eat() {
        	System.out.println("猫吃死");
        }
    }
    
  • 接口和实现类

public class PloymorphismTest {
public static void main(String[] args) {
	    //
	MyInterface myInterface=new MyInterfanceple();
	myInterface.inter();
}
}

public   interface MyInterface {
    public abstract void inter();
}

public class MyInterfanceple implements MyInterface {
   public void inter() {
	   System.out.println("太快了");
   }
}

多态实现细节

  • 多态的程序中,子类父类中成员变量的特点
    • 编译期,看父类是否有这个变量,有则成功,没则失败
    • 运行期,运行父类的变量
  • 多态程序中,子类父类成员方法的特点
    • 编译期,看父类是否有这个方法,有则成功,没则失败
    • 运行期:运行子类的方法重写
  • 小总结 fu f= new zi();
    • 变量:编译看左边,运行看左边
    • 方法:编译看左边,运行看右边
为什么编译时父类,运行是子类(成员方法)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g6Vs5XkU-1595509103667)(C:\Users\15272\Desktop\笔记\笔记照片\方法运行.png)]

多态转型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ISpAmj4K-1595509103671)(C:\Users\15272\Desktop\笔记\笔记照片\多态转型.png)]

  • 多态的好处和弊端

    • 好处:运行子类的重写方法,多态程序中可以随时扩展子类对象
    • 弊端:多态中,能调用子类父类的共有成员,不能调用子类的特有成员

类型转换时候出现的异常问题

类型转换异常

public static void main(String[] args) {
		/*
		 * 多态创建对象
		 * Cat和Dog都继承Animal
		 * 调用子类父类的共性内容eat()
		 * 调用不了,子类特有的内容,catchMouse(),lookHome();
		 * */
Animal a=new Dog();
//类型强制转换,向下转型,已经提升为Animal类型的cat对象,强制转换为Dog类型

a.eat();


Cat c=(Cat) a;
//对象c 调用Cat类的特有成员,共有成员
c.catchMouse();

	}

解决异常的出现:关键是要转换的对象a上,判断出a这个引用,是Dog对象还是

Cat对象

  • 运算符 instanceof 作比较

    • 比较的结果是布尔类型

    • instanceof 比较出,a到底是哪个类的对象

    • 语法

      引用类型变量 instanceof 类名
      例子
      a instanceof cat 含义   a是不是Cat的对象
      

多态案例(接口多态案例)

需求:有一台笔记本电脑,笔记本上面有接口,usb是真实存在的接口,使用笔记本的人可以直接向接口连接一下设备,鼠标键盘,…

笔记本的厂家,不会预先想到USB接口会连接一些哪些设备

设计一台笔记本电脑,出现USB接口,可以连接任意的外接设备

核心技术,方法的参数是接口类型,调用方法传递实现类对象,多态调用,执行实现类的重写方法

package Ploymorphism03;
//接口
public  interface  USB {
    public abstract void open();
    public abstract void close();
}

//实现类
public class  Mouse implements USB{
	
	public  void open() {
		System.out.println("鼠标开机");
	}
	
    public void close() {
    	System.out.println("鼠标关机");
    }
}

//实现类
public class Keyboard implements USB{
	public  void open() {
		System.out.println("键盘开机");
	}
    public void close() {
    	System.out.println("键盘关机");
    }
}


public class Computer {
      public void use(USB u) {
    	  u.open();
    	  u.close();
      }

	
}
public class Test {

	public static void main(String[] args) {
		 Computer computer=new Computer();
		 computer.use(new Mouse());
		 computer.use(new Keyboard());
	}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值