面对对象的多态
//多态 //如何实现多态: //1:使用集成 //2:子类重写父类的方法 //3;父类引用子类对象 package day8; public abstract class Instrument { public abstract void play(); }
package day8; public class Piano extends Instrument{ @Override public void play() { System.out.println("月光曲!"); } }
package day8; public class Violin extends Instrument{ @Override public void play() { System.out.println("葫芦娃!"); } }
package day8; public class Artist { //Instrument instrument = new piano();(只用来理解) public void make(Instrument instrument) { instrument.play(); } }
package day8; public class Test { public static void main(String[] args) { Artist user1 = new Artist(); //实例化对象=是赋值,后面是实例化一个对象,前面是用来接收的 Piano piano = new Piano(); Violin violin = new Violin(); user1.make(piano); user1.make(violin); } }
结果图:
练习:租用车(轿车和客车)
package day8_2; public abstract class MotoVechicle { private String no; private String brand; private String color; private String mileage; public String getNo() { return no; } public void setNo(String no) { this.no = no; } public String getBrand() { return brand; } public void setBrand(String brand) { this.brand = brand; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public String getMileage() { return mileage; } public void setMileage(String mileage) { this.mileage = mileage; } public MotoVechicle() { super(); } public MotoVechicle(String no, String brand, String color, String mileage) { super(); this.no = no; this.brand = brand; this.color = color; this.mileage = mileage; } public abstract int calcRent(int day); }
package day8_2; public class Car extends MotoVechicle{ private String type; public String getType() { return type; } public void setType(String type) { this.type = type; } public Car(String type) { super(); this.type = type; } public Car(String type,String no, String brand, String color, String mileage) { super(no,brand,color,mileage); this.type = type; } @Override public int calcRent(int day) { int price = 0; if (type.equals("GL8")) { price = 600 * day; }else if(type.equals("BMW")){ price = 500 * day; }else if (type.equals("Buick")) { price = 300 * day; } return price; } }
package day8_2; public class Bus extends MotoVechicle{ private int seatCount; public int getSeatCount() { return seatCount; } public void setSeatCount(int seatCount) { this.seatCount = seatCount; } public Bus(int seatCount) { super(); this.seatCount = seatCount; } public Bus(int seatCount,String no, String brand, String color, String mileage) { super(no,brand,color,mileage); this.seatCount = seatCount; } @Override public int calcRent(int day) { int price = 0; if (seatCount > 16) { price = 1500 * day; }else if (seatCount <= 16) { price = 800 * day; } return price; } }
package day8_2; public class CalcTest { public int calc(MotoVechicle motoVehicle,int day){ int price = motoVehicle.calcRent(day); return price; } public static void main(String[] args) { int result = 0; Car car = new Car("GL8"); CalcTest calcPrice = new CalcTest(); result = calcPrice.calc(car, 7); System.out.println("租两天GL8的价格为:"+result); } }
结果图:
面对对象接口
//接口:接口是一种规范 //接口不可以被实例化 //接口里面的方法都是抽象的 package day8_3; public interface InterfaceDemo { //1:接口不能被实例化 //2:接口里面的方法默认都是public类型的抽象方法 //所有public abstract修饰可以忽略 //3:类是单继承 但是类可以实现多个接口 //4:在接口里定义的属性都是public类型的静态常量 // public static final可以省略 //5:接口可以继承多个接口,可以得到父级接口里面的"所有"的属性和方法 public static final int AGE = 10; void showName(); }
package day8_3; public class UDisk implements UsbInterface { public void service() { System.out.println("连接USB接口,开始传输数据"); } public static void main(String[] args) { //多态的一种,向上转型(多态就是"父类引用子类对象!!!") UsbInterface uDisk = new UDisk(); uDisk.service(); } }
package day8_3; public interface UsbInterface { void service(); }
结果图: