Java复习第十天:final关键字、权限修饰符、内部类、匿名内部类

一 final关键字

1.final的使用对象
final可以修饰类: 那么该类就不能被继承(太监类)
final可以修饰方法: 那么该方法就不能被重写
final可以修饰变量:
a.成员变量
那么该成员变量只能赋值一次,创建对象之后不能再次赋值
可以直接在定义成员变量时赋值,也可以在构造方法中给成员变量赋值
b.局部变量
那么该局部变量只能赋值一次,
可以先定义后赋值,也可以定义的同时赋值,但是只能赋值一次
c.引用类型变量
那么该引用类型变量所保存的地址值不能改变,而不是地址中的内容不能改变

二 权限修饰符

在这里插入图片描述
一般我们这样使用权限修饰符:
成员变量使用 private ,隐藏细节。
构造方法使用 public ,方便创建对象。
成员方法使用 public ,方便调用方法。
tip:不加权限修饰符,其访问能力与default修饰符相同

修饰成员变量
	public 无论在哪个类中,创建了本类对象之后都可以直接使用
	protected 在本类,本包其他类,以及其他包的子类中可以直接使用
	default 只能在本类,本包的其他类中可以直接使用
	private 只能在本类中使用
修饰成员方法
	public 无论在哪个类中,都可以直接调用成员变量
	protected 在本类,本包其他类,以及其他包的子类中可以直接调用
	default 只能在本类,本包其他类中直接调用
	private 只能在本类中调用
修饰构造方法
	public : 无论在那个类中都可以创建对象
	protected和default是一样,因为构造方法子类是无法继承
		只能在本类和本包其他类中使用
	private: 只能本类中创建对象(一般用于单例设计模式)	
	
tip:局部变量不能使用权限修饰符(无意义)

三.内部类

1.1成员内部类

     在描述事物时,若一个事物内部还包含其他事物,就可以使用内部类这种结构。比如,汽车类 Car 中包含发动机类 Engine ,
 这时, Engine 就可以使用内部类来描述,定义在成员位置。
 class 外部类 {
  //成员变量
   class 内部类{
   }
 }

1.2访问特点

   1.内部类可以直接访问外部类的成员,包括私有成员。
   2.外部类要访问内部类的成员,必须要建立内部类的对象。
 创建内部类对象格式:
   外部类名.内部类名 对象名 = new 外部类型().new 内部类型();
   或
   外部类型 外部类对象名 = new 外部类();
   外部类型.内部类型 内部对象名 =外部类对象. new 内部类();
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;
    }
}
public class TestPerson {
    public static void main(String[] args) {

        /*
        创建内部类对象
        方式一:

        Person.Heart heart = new Person().new Heart();
        heart.jump();*/

        //方式二:
        Person p = new Person();
        Person.Heart heart1 = p.new Heart();
        //调用内部类方法
        heart1.jump();      //输出:心脏在跳动
        //调用外部类方法
        p.setLive(false);
        heart1.jump();      //输出: 心脏不跳了
        
    }

}

2.1局部内部类

    局部内部类:
		public class 外部类{
				//成员变量
				//成员方法
				public void show(){
					class 内部类{
					}
				}
			}

2.2访问特点
特点1: 局部内部类只能在局部使用
特点2: 局部内部类中可以无条件访问外部类的成员

3.匿名内部类
3.1前提

   匿名内部类必须继承一个父类或者实现一个父接口。

3.2格式

   new 父类名或者接口名(){
       // 方法重写
      @Override
      public void method() {
          // 执行语句
       }
   };

3.2.3.使用方式
定义接口

public abstract class FlyAble{
public abstract void fly();
}

创建匿名内部类,并调用

public class InnerDemo1 {
  public static void main(String[] args) {
    /*
    1.等号右边:定义并创建该接口的子类对象
    2.等号左边:是多态,接口类型引用指向子类对象
   */
    FlyAble  f = new FlyAble(){
      public void fly() {
        System.out.println("我飞了~~~");
     }
   };
    // 将f传递给showFly方法中
    showFly(f);
 }
  public static void showFly(FlyAble f) {
    f.fly();
 }
}

以上可以简化,代码如下:

public class InnerDemo2 {
  public static void main(String[] args) {   
    /*
   创建匿名内部类,直接传递给showFly(FlyAble f)
    */
    showFly( new FlyAble(){
      public void fly() {
        System.out.println("我飞了~~~");
     }
   });
 }
  public static void showFly(FlyAble f) {
    f.fly();
 }
}

猜你喜欢

转载自blog.csdn.net/weixin_41229776/article/details/84640863