使用内部类和外部类
1、创建Car接口
2、创建Driver类
3、创建TestDriver测试类
(一)编程实现
- 创建Car汽车接口
package net.jia.p03.t04;
/**
* 功能: 汽车类
* 作者:贾慧琳
* 日期:2022年05月12日
*/
public interface Car {
void start();
void run();
void stop();
}
- 创建Driver司机类
- 在
Drive
r类里创建成员内部类Benz
package net.jia.p03.t04;
/**
* 功能: 司机类
* 作者:贾慧琳
* 日期:2022年05月12日
*/
public class Driver {
/**
* 成员内部类Benz
*/
class Benz implements Car {
private String model;
private double price;
private String color;
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
@Override
public void start() {
System.out.println("奔驰[" + model + "]正在起步……");
}
@Override
public void run() {
System.out.println("奔驰[" + model + "]行驶……");
}
@Override
public void stop() {
System.out.println("奔驰[" + model + "]停止……");
}
public void speck() {
System.out.println(color + "色奔驰[" + model + "]单价:" + price +"万~");
}
}
}
- Driver
是Benz
的外部类,Benz
就是Driver
的成员内部类,给Driver
类添加name
属性和drive(Car car)
方法
package net.jia.p03.t04;
/**
* 功能: 司机类
* 作者:贾慧琳
* 日期:2022年05月12日
*/
public class Driver {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void drive(Car car) {
if (car instanceof Benz) {
Benz benz = (Benz) car;
benz.speck();
}
car.start();
car.run();
car.stop();
}
/**
* 成员内部类Benz
*/
class Benz implements Car {
private String model;
private double price;
private String color;
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
@Override
public void start() {
System.out.println("奔驰[" + model + "]正在起步……");
}
@Override
public void run() {
System.out.println("奔驰[" + model + "]行驶……");
}
@Override
public void stop() {
System.out.println("奔驰[" + model + "]停止……");
}
public void speck() {
System.out.println(color + "色奔驰[" + model + "]单价:" + price +"万~");
}
}
}
- 创建TestDriver司机测试类
package net.jia.p03.t04;
/**
* 功能: 测试司机类
* 作者:贾慧琳
* 日期:2022年05月12日
*/
public class TestDriver {
public static void main(String[] args) {
// 创建司机对象(外部类对象)
Driver driver = new Driver();
// 设置司机对象属性
driver.setName("唐小刚");
// 基于司机对象(外部类对象)创建奔驰对象(内部类对象)
Driver.Benz benz = driver.new Benz();
// 设置奔驰对象属性
benz.setModel("梅赛德斯-AMG A 35 L 4MATIC");
benz.setPrice(45);
benz.setColor("蓝");
// 调用司机对象的驾驶方法
driver.drive(benz);
}
}
- 运行测试类程序,查看结果
- 修改TestDriver司机测试类,演示匿名内部类
package net.jia.p03.t04;
/**
* 功能: 测试司机类
* 作者:贾慧琳
* 日期:2022年05月12日
*/
public class TestDriver {
public static void main(String[] args) {
// 创建司机对象(外部类对象)
Driver driver = new Driver();
// 设置司机对象属性
driver.setName("唐小刚");
// 基于司机对象(外部类对象)创建奔驰对象(内部类对象)
Driver.Benz benz = driver.new Benz();
// 设置奔驰对象属性
benz.setModel("梅赛德斯-AMG A 35 L 4MATIC");
benz.setPrice(45);
benz.setColor("蓝");
// 调用司机对象的驾驶方法
driver.drive(benz);
System.out.println("===================================");
// 司机驾驶宝马车(采用匿名内部类方式)
driver.drive(new Car() {
private String model = "全新BMW Z4敞篷跑车";
private double price = 55;
private String color = "红";
@Override
public void start() {
System.out.println("宝马[" + model + "]正在起步……");
}
@Override
public void run() {
System.out.println("宝马[" + model + "]行驶……");
}
@Override
public void stop() {
System.out.println("宝马[" + model + "]停止……");
}
public void speck() {
System.out.println(color + "色宝马[" + model + "]单价:" + price +"万~");
}
});
}
}
- 运行程序,查看结果