java从小白到老白⑤——传智播客27版笔记

  • 今天主要说些内部类的相关基础知识,如果能做出下面这个小题目,再下面的内容不看也罢(面试题答案在最后)
    内部类面试题:补全下列代码,实现目标输出,其中描述阶段的数字只能调用已有变量,不能用其他方式
    public class TestInner1 {
    	public static void main(String[] args) {
    		//调用
    	}
    }
    
    class Programmer{
    	private int n = 1;
    	class Bald{
    		private int n = 2;
    		
    		public void expert() {
    			int n = 3;
    			System.out.println("level " + *** + ":programmer");
    			System.out.println("level " + *** + ":bald");
    			System.out.println("level " + *** + ":expert");
    		}
    	}
    }
    

    输出目标:

    level 1:programmer
    level 2:bald
    level 3:expert
    
  • 内部类(一般内部类是为了增强安全性,不易被外界访问)
    1.访问特点:

    ①内部类可直接访问外部类的成员,包括私有
    ②而外部类想要访问内部类的成员,需要先创建对象
    2.(1)成员内部类
直接访问内部类:外部类名.内部类名 对象名 = new 外部类名().new 内部类名();
eg:

package javaBasic;

public class TestInner {
	public static void main(String[] args) {
		new Stripling().new Diligent().need();
	}
}

class Stripling{
	class Diligent{
		public void need() {
			System.out.println("Make a great effort to pass CET-6 at one time!");
		}
	}
}

成员内部类被静态修饰后的访问方式是:外部类名.内部类名 对象名 = new 外部类名.内部类名();
eg:

package javaBasic;

public class TestInner {
	public static void main(String[] args) {
		new Stripling. Diligent().need1();
	}
}

class Stripling{
	private int num1 = 1;//static的内部类Diligent不能访问外部类的非static成员
	private static int num2 = 2;
	
	public static class  Diligent{
		public void need() {
			System.out.println(num2 + "\nMake a great effort to pass CET-6 at one time!");
		}
		
		public static void need1() {
			System.out.println(num2 + "1\nMake a great effort to pass CET-6 at one time!");
		}
	}
}

3.局部内部类
         ①局部内部类访问局部变量必须用final修饰
         a.局部变量是随着方法的调用而调用,随着调用完毕而消失
         b.相比之下,堆内存的内容不会立即消失(堆内存随着垃圾回收器的作用而消失)
         c.综合a、b,我们需要用final修饰,变量变常量——内存中存储的是对应的数据值

4.匿名内部类:继承了相应的类或者实现了相应接口的子类匿名对象,功能上可理解为内部类的简化写法
            ①前提:存在一个类(可是具体类也可是抽象类)或接口
            ②格式:new 类名或者接口名(){
                重写方法;
            }

  • 顺序问题:package>import>class
  • 修饰符:

    ①权限修饰符:private,default,protected,public
    ②状态修饰符:static,final
    ③抽象修饰符:abstract
  (1)类:
    ①权限修饰符:private,default,protected,public
    ②状态修饰符:final(因为内部类可以看做外部类的成员,则内部类可以用static修饰)
    ③抽象修饰符:abstract
  (2)成员变量:
    ①权限修饰符:private,default,protected,public
    ②状态修饰符:static,final
  (3)构造方法:
    ①权限修饰符:private,default,protected,public
  (4)成员方法:
      ①权限修饰符:private,default,protected,public
    ②状态修饰符:static,final
    ③抽象修饰符:abstract
  (5)the other组合方式:
      成员变量:public static final//静态成员常量
      成员方法:public static
                public final
                public abstract

  • 面试题答案:
    package javaBasic;
    
    public class TestInner1 {
    	public static void main(String[] args) {
    		new Programmer().new Bald().expert();
    	}
    }
    
    class Programmer{
    	private int n = 1;
    	class Bald{
    		private int n = 2;
    		
    		public void expert() {
    			int n = 3;
    			System.out.println("level " + Programmer.this.n + ":programmer");//通过外部类名限制this范围
    			System.out.println("level " + this.n + ":bald");
    			System.out.println("level " + n + ":expert");
    		}
    	}
    }
    

猜你喜欢

转载自blog.csdn.net/Moliay/article/details/85037828
今日推荐