文章目录
项目三、
任务四、司机开不同的车
·创建Car接口
·创建Driver接口
·创建测试类TestDriver
1.基于Car接口创建成员内部类对象作为参数传给驾驶员对象的driver()方法
2.基于Car接口创建匿名内部类对象作为参数传给驾驶员对象的driver()方法
(一)编程实现
1、 创建汽车接口类
·在net.lixin.p03.t04包里创建Car接口
2.创建司机类
-在net.lixin.p03.t04包里创建Driver类
-在Driver类里创建成员内部类Benz
package net.lixin.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 speak(){
System.out.println(color+“色奔驰[”+model+“]单价”+price+“万~”);
}
@Override
public void start(){
System.out.println(“奔驰[”+model+“]起步…”);
}
@Override
public void run(){
System.out.println(“奔驰[”+model+“]行驶…”);
}
@Override
public void stop(){
System.out.println(“奔驰[”+model+“]停止…”);
}
}
} -
(1)Driver是Benz的外部类,Benz就是Driver的成员内部类==
(2).给Driver类添加name属性和==driver(Car car)==方法
3.创建测试司机类
·在net.lixin.p03.to4包里创建TestDriver类
package net.lixin.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.driver(benz);
}}
运行程序,查看结果
5.修改TestDriver类,演示匿名内部类
·匿名内部类是直接基于接口创建对象
package net.lixin.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.driver(benz);
System.out.println("=================");
//司机驾驶宝马车(采用匿名内部类方式)
driver.driver(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+"]停止.....");
}
@Override
public void speak() {
System.out.println(color+"色宝马["+model+"]单价:"+price+"万~");
}
});
}
}
6.运行程序,查看结果
(二)知识点讲解
一.在Java中,允许在一个类的内部定义类,这样的类称为内部类(inner class),在这个内部类·所在的类称作外部类(outer class)
1. 成员内部类定义: 在一个类中除了可以定义成员变量、成员方法,还可以定义类,这样的类被称为成员内部类。其实我们可以将内部类理解成为国中之国。
2.局部内部类定义: 局部内部类也叫做方法内部类,就是定义在某个局部范围中的类,它和局部变量一样,都是在方法定义中定义的,其有效范围只限于方法内部类。
3.静态内部类定义: 所谓静态内部类,就是使用static关键字修饰的成员内部类。静态内部类在成员内部类前增加了static关键字,在功能上,静态内部类中只能访问外部类的静态成员,同时通过外部类访问静态内部类成员时,可以跳过外部类从而直接通过内部类访问静态内部类成员。
4. 匿名内部类: 匿名内部类其实就是没有名称的内部类。再强调包含有接口类型参数的方法时,通常为了简化代码,可以直接通过匿名内部类的形式传入一个接口类型参数,在匿名内部类中直接完成方法的实现。