1、对象的向上转型与向下转型
-
向上转型 对象的向上转型就是多态的写法: 格式: 父类名称 对象名 = new 子类名称(); 含义:右侧创建一个子类对象,把他当做父类来看待,比如:创建了一只猫,当做动物来看待。 注意:向上转型一定是安全的,从小范围转到大范围, 类似于:自动类型转化; 代码 实现: package Interface.demo6;
public abstract class Animal {
public abstract void eat();
}
package Interface.demo6;
public class Cat extends Animal {
@Override
public void eat() {
System.out.println("猫吃鱼");
}
}
package Interface.demo6;
public class Demo01Main {
public static void main(String[] args) {
Animal animal = new Cat();
animal.eat();
}
}
-
向下转型 作用:实例化的类向上转型后,如果想访问子类的成员方法或成员变量,就会无法访问,通过向下转型后,就可以访问。 对象的向下转型其实就是一个还原动作, 格式:子类的名称 对象名 = (子类名称)父类对象; 含义:将父类对象 【还原】成本类的子类对象。 Animal animal = new Cat(); //本来是猫,向上转型为动物, Cat cat = (Cat) animal; //本来是猫,向上转型为动物,还原回来成为本来的猫, 注意:
- 必须保证对象创建是,与还原是的类型是一致的,例如:猫还原为猫,够还原为狗
- 如果对象创建时候本来不是猫,现在非要还原为猫,就会报运行时错误:ClassCastException,表示:类型转化错误。
类似于:基本数据类型的强制类型转化 package Interface.demo6;
public abstract class Animal {
public abstract void eat();
}
package Interface.demo6;
public class Cat extends Animal {
@Override
public void eat() {
System.out.println("猫吃鱼");
}
public void catchMouse(){
System.out.println("猫抓老鼠");
}
}
package Interface.demo6;
public class Demo01Main {
public static void main(String[] args) {
Animal animal = new Cat();
animal.eat();
Cat cat = (Cat) animal;
cat.catchMouse();
}
}
猫吃鱼 猫抓老鼠
2、instanceof方法
instanceof可以判断引用类型的变量是否属于这个类型
package Interface.demo6;
public class Demo01Main {
public static void main(String[] args) {
Animal animal = new Cat();
animal.eat();
}
public static void getAnPet(Animal animal){
if(animal instanceof Cat){
Cat cat = (Cat) animal;
cat.catchMouse();
}else {
System.out.println("没有其他类");
}
}
}
记住:instanceof 在向下转型是判断要转的这个类属于那个类,这个类与他的向上转型的类一致
3、笔记本usb接口案例
package Interface.demo7;
public class Computer {
public void powerOn(){
System.out.println("打开电脑");
}
public void powerOff(){
System.out.println("关闭电脑");
}
public void useDrivce(Usb usb){
usb.open();
if (usb instanceof Mouse) {
Mouse mouse = (Mouse) usb;
mouse.type();
}else if (usb instanceof Keyboard){
Keyboard keyboard = (Keyboard) usb;
keyboard.type();
}
usb.close();
}
}
package Interface.demo7;
public interface Usb {
public abstract void open();
public abstract void close();
}
package Interface.demo7;
public class Mouse implements Usb {
@Override
public void open() {
System.out.println("打开鼠标");
}
@Override
public void close() {
System.out.println("关闭鼠标");
}
public void type(){
System.out.println("鼠标点击");
}
}
package Interface.demo7;
public class Keyboard implements Usb {
@Override
public void open() {
System.out.println("打开键盘");
}
@Override
public void close() {
System.out.println("关闭键盘");
}
public void type(){
System.out.println("键盘输入");
}
}
package Interface.demo7;
public class demoMain {
public static void main(String[] args) {
Computer computer = new Computer();
computer.powerOn();
Usb mouseUsb = new Mouse();
computer.useDrivce(mouseUsb);
Usb keyBoardUsb = new Keyboard();
computer.useDrivce(keyBoardUsb);
computer.powerOff();
}
}
打开电脑 打开鼠标 鼠标点击 关闭鼠标 打开键盘 键盘输入 关闭键盘 关闭电脑
|