内部类
概述:
将一个类A定义在另一个类B里面,里面的那个类A就称为内部类,B则称为外部类
成员内部类:
在描述事务时,若一个事物内部还包含其他事物,就可以使用内部类来表示这种结构。比如:汽车类Car中包含发动机类Engine,这时,Engine就是可以使用内部类来描述,定义在成员位置。
访问特点:
内部类可以直接访问外部类的成员,包括私有成员
外部类要访问内部类的成员,必须要建立内部类的对象
创建内部类对象格式:
外部类名,内部类名,对象名=new 外部类型().new 内部类型();
内部类例子 :
Person类:
外部类:人
内部类:心脏(是否跳动)
package aaa;
public class Person {
private boolean live=true;
class Heart{
public void jump(){
if(live)
System.out.println("还活着。");
else
System.out.println("不跳了。");
}
}
public boolean isLive() {
return live;
}
public void setLive(boolean live) {
this.live = live;
}
}
测试类:
package aaa;
import java.util.Scanner;
public class Test {
public static void main(String[] args){
Person p = new Person();
Person.Heart h = p.new Heart();
h.jump();
p.setLive(false);
h.jump();
}
}
匿名对象+匿名对象的创建
例子:
测试类
package aaa;
import java.util.Scanner;
public class Test {
public static void main(String[] args){
// 接口和方法不能创建对象
// FlyClass flyClass = new FlyClass(){
// 匿名类,父类接口是FlyClass,实现了FlyClass接口
// public void fly(){
// System.out.println("飞起来!");
// }
// @Override
// public void down(){
// System.out.println("下来吧!");
// }
// };
showFly(new FlyCLass(){
//类似于匿名对象,在匿名对象的基础上加上了匿名创建对象
public void fly(){
System.out.println("飞起来!");
}
});
// Fu fu = new Fu();
// fu.fly();
// Person p = new Person();
// Person.Heart h =p.new Heart();
// h.jump();
// p.setLive(false);
// h.jump();
// Scanner scanner = new Scanner(System.in);
// int a = scanner.nextInt();
// System.out.println(scanner.nextInt());
}
//创建一个fly()方法
public static void showFly(FlyCLass f){
f.fly();
}
}
接口
package aaa;
public interface FlyCLass {
public void fly();
}
一个类并实现了接口
package aaa;
import aaa.FlyCLass;
public class Fu implements FlyCLass {
@Override
public void fly(){
System.out.println("飞起来");
}
public void down(){
System.out.println("下来吧");
}
}