day14_ 权限修饰符 内部类 匿名内部类

今日内容

  • 权限修饰符

  • 内部类

  • 匿名内部类

权限修饰符

  public(公共的) protected(受保护的) (default)这个是默认的,不写 pervate(私有的)
同一个类
同一个包 ×
不同包的子类 × ×
不同包的非子类 × × ×

 

如果一个类被public修饰,那么该类对应的源文件.java的文件名需要和类名保持一致

不同权限修饰符有不同的访问能力

其中private是最小的权限,public是最大的权限

成员变量:建议使用private,隐藏细节

构造方法:使用public,方便创建对象

成员方法:建议使用public,方便调用

 

内部类

内部类就是将一个类A定义在另一个类B里面,里面的类A就是内部类,类B就是外部类

  成员内部类就是定义在类中方法外的类,也就是定义在成员位置的内部类(比如心脏和身体的关系,此时就需要使用内部类)

    成员内部类格式:

修饰符  class  外部类名称{
    修饰符  class  内部类名称{
      //....  
}
    //....
}

    访问特点

内部类可以直接访问外部类的成员,包括私有成员
外部类要访问内部类的成员,必须建立内部类的对象

    使用内部类的格式:

外部类类名.内部类  对象名  = new  外部类名().new  内部类名();

内部类是个独立的类,编译后仍然会产生一个.class文件,该类文件名称:外部类类名$内部类名.class

  

匿名内部类(最常用的内部类)

内部类的简写,本质是带着具体实现父类或者父接口的匿名的子类对象

  匿名内部类的前提

匿名内部类必须继承一个父类或者实现一个接口,伴随着重写父类或者父接口当中的抽象方法。

  匿名内部类的格式

new 父类名或者是父接口名 {
    //方法的重写
    @Override
    public void method(){
    //重写的方法体内容...
    }
};
在方法的形式参数是借口或者抽象类时,一般可以将匿名内部类作为实参进行参数穿递。

 

public interfaceAnimal{
//
        public abstract void eat();
}
//定义一个启动类
public class Demo{
//定义一个成员方法
  public static void showEat(Animal animal){
animal.eat();
}  
public static void main(Stirng[] 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("猫吃鱼");
}
});
}
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

    

 

posted @ 2020-11-26 22:20  wajueji  阅读(125)  评论(0编辑  收藏  举报