权限修饰符:
-
-
protected: 受保护的
-
(default): 默认不写
-
public | protected | (default) | private | |
---|---|---|---|---|
同一类中 | √ | √ | √ | √ |
同一包下不同类中 | √ | √ | √ | × |
不同包的子类中 | √ | √ | × | × |
不同包的非子类中 | √ | × | × |
成员变量:使用private,隐藏细节
构造方法: 使用public,方便创建对象
成员方法: 建议使用public,方便调用。
备注:【默认级别】,是不写的
内部类:
将一个类A定义在另一个类B里面,里面的类A就称为**内部类**,类B则称为**外部类**。
修饰符 class 外部类名称 { 修饰符 class 内部类名称{ //...... } //..... }
内部类可以直接访问外部类的成员,包括私有成员。
外部类要访问内部类的成员,必须建立内部类的对象
外部类类名.内部类类名 对象名 = new 外部类类名().new 内部类类名(); //创建内部类对象
匿名内部类:
带着具体实现 父类或者父接口的 匿名的子类对象
前提:
匿名内部类必须【继承一个父类】或者【实现一个接口】,伴随着重写父类或者父接口当中的抽象方法。
new 父类名或者父接口名 { // 方法的重写 @Override public void method(){ // 重写的方法体内容。。。 } };
传递参数:
public interface Animal { // 吃 public abstract void eat(); } // 定义一个启动类 public class DemoAnonymous { // 定义成员方法 public static void showEat(Animal animal){ animal.eat(); } public static void main(String[] args) { // 采用匿名内部类的方式来写 // 多态写法 // 等号左边:接口 // 等号右边:本质是Animal接口的子类对象 Animal animal = new Animal() { @Override public void eat(){ System.out.println("猫吃鱼"); } }; showEat(animal); // 猫吃鱼 // 简化一下 showEat(new Animal(){ @Override public void eat(){ System.out.println("猫吃鱼"); } }); } }