权限修饰符与内部类

时间:2021-09-14 00:26:36
一、包
1.包
包就是对类进行分类管理
com.fruit.manage.add
com.fruit.manage.update
2.包的命名规则
公司域名的倒序
全部小写
多个包之间用.分割
3.一个类中的组成顺序
package -- import -- class
二、权限修饰符
public:         本类 相同包(子父类或无关类)      不同包(子父类)     不同包(无关类)
protected:      本类        相同包(子父类或无关类)      不同包(子父类)    
默认:          本类        相同包(子父类或无关类)     
private:        本类

修饰符总结
修饰符
成员变量
成员方法
构造方法
public
Y
Y
Y
Y
default
Y
Y
Y
Y
protected
 
Y
Y
Y
private
 
Y
Y
Y
abstract
Y
 
Y
 
static
 
Y
Y
 
final
Y
Y
Y
 

三、内部类
1.分类
成员内部类     局部内部类      匿名内部类
2.成员内部类
定义位置:
定义在类中的成员位置

创建对象格式:
外部类名.内部类名 对象名 = new 外部类对象().new 内部类对象();
案例:
public class Test01 {
public static void main(String[] args) {
//创建对象
Person.Heart ph = new Person().new Heart();
ph.jump();
}
}

class Person {
String name = "王五";
class Heart {
String name = "李四";
public void jump() {
String name = "张三";
System.out.println(Person.this.name + "心脏在跳动"); // 王五
System.out.println(this.name + "心脏在跳动"); // 李四
System.out.println(name + "心脏在跳动"); // 张三
}
}
}
3.局部内部类
了解(写在成员方法里的内部类)
4.匿名内部类
abstract class Animal {
public abstract void eat();
//public abstract void sleep();
}

public class Test01 {
public static void main(String[] args) {
/*Animal a = new Animal(){
@Override
public void eat() {
System.out.println("吃饭...");
}

@Override
public void sleep() {
System.out.println("睡觉...");
}
};
a.eat();
a.sleep();*/
new Animal(){
@Override
public void eat() {
System.out.println("吃饭...");
}
}.eat();
}
}


例如:

public class Test {
//成员内部类
    class B {
int b = 7;
}
public static void main(String[] args) {
//局部内部类
class A {
public int i = 5;
}
A a = new A();
System.out.println(a.i);
Test.B b = new Test().new B();
System.out.println(b.b);
//匿名内部类
new C() {
@Override
public void funny() {
System.out.println("it's funny");
}
}.funny();;
}
}

abstract class C {
public abstract void funny();
}




匿名内部类: 创建出来的也是一个对象,类似于匿名对象,只不过这个对象的类体要重写或实现父类或接口的方法
匿名内部类:

new 类名() {
@Override
public 返回值类型  方法名(参数列表){
。。。
}
};
父类名(或接口名)  变量名  =  new 类名() {
@Override
public 返回值类型  方法名(参数列表){
。。。
}
};

匿名对象:
new 类名();
new 类名(参数列表);