• InnerClass.java


    
    package com.atguigu.java2;
    /*
     * 类的内部成员之五:内部类
     * 1. Java中允许将一个类A声明在另一个类B中,则类A就是内部类,类B称为外部类
     * 
     * 2.内部类的分类:成员内部类(静态、非静态)  vs 局部内部类(方法内、代码块内、构造器内)
     * 
     * 3.成员内部类:
     * 		一方面,作为外部类的成员:
     * 			>调用外部类的结构
     * 			>可以被static修饰
     * 			>可以被4种不同的权限修饰
     * 
     * 		另一方面,作为一个类:
     * 			> 类内可以定义属性、方法、构造器等
     * 			> 可以被final修饰,表示此类不能被继承。言外之意,不使用final,就可以被继承
     * 			> 可以被abstract修饰
     * 
     * 
     * 4.关注如下的3个问题
     *   4.1 如何实例化成员内部类的对象
     *   4.2 如何在成员内部类中区分调用外部类的结构
     *   4.3 开发中局部内部类的使用  见《InnerClassTest1.java》
     * 
     */
    public class InnerClassTest {
    	public static void main(String[] args) {
    		
    		//创建Dog实例(静态的成员内部类):
    		Person.Dog dog = new Person.Dog();
    		dog.show();
    		//创建Bird实例(非静态的成员内部类):
    //		Person.Bird bird = new Person.Bird();//错误的
    		Person p = new Person();
    		Person.Bird bird = p.new Bird();
    		bird.sing();
    		
    		System.out.println();
    		
    		bird.display("黄鹂");
    		
    	}
    }
    
    
    class Person{
    	
    	String name = "小明";
    	int age;
    	
    	public void eat(){
    		System.out.println("人:吃饭");
    	}
    	
    	
    	//静态成员内部类
    	static class Dog{
    		String name;
    		int age;
    		
    		public void show(){
    			System.out.println("卡拉是条狗");
    //			eat();
    		}
    		
    	}
    	//非静态成员内部类
    	class Bird{
    		String name = "杜鹃";
    		
    		public Bird(){
    			
    		}
    		
    		public void sing(){
    			System.out.println("我是一只小小鸟");
    			Person.this.eat();//调用外部类的非静态属性
    			eat();
    			System.out.println(age);
    		}
    		
    		public void display(String name){
    			System.out.println(name);//方法的形参
    			System.out.println(this.name);//内部类的属性
    			System.out.println(Person.this.name);//外部类的属性
    		}
    	}
    	
    	
    	public void method(){
    		//局部内部类
    		class AA{
    			
    		}
    	}
    	
    	{
    		//局部内部类
    		class BB{
    			
    		}
    	}
    	
    	public Person(){
    		//局部内部类
    		class CC{
    			
    		}
    	}
    	
    	
    	
    }
    
    package com.atguigu.java2;
    
    public class InnerClassTest1 {
    	
    	
    	//开发中很少见
    	public void method(){
    		//局部内部类
    		class AA{
    			
    		}
    	}
    	
    	
    	//返回一个实现了Comparable接口的类的对象
    	public Comparable getComparable(){
    		
    		//创建一个实现了Comparable接口的类:局部内部类
    		//方式一:
    //		class MyComparable implements Comparable{
    //
    //			@Override
    //			public int compareTo(Object o) {
    //				return 0;
    //			}
    //			
    //		}
    //		
    //		return new MyComparable();
    		
    		//方式二:
    		return new Comparable(){
    
    			@Override
    			public int compareTo(Object o) {
    				return 0;
    			}
    			
    		};
    		
    	}
    	
    }
    
  • 相关阅读:
    Codeforces Round #340 (Div. 2)
    搞清楚一下格式化输出
    TYVJ P1091 等差数列 Label:dp
    TYVJ P1098 任务安排 Label:倒推dp 不懂
    TYVJ P1034 尼克的任务 Label:倒推dp
    TYVJ P1045 &&洛谷 1388 最大的算式 Label:dp
    TYVJ P1046 Blast Label:dp
    TYVJ P1051 选课 Label:多叉转二叉&&树形dp(虐心♥)
    TYVJ P1073 加分二叉树 Label:区间dp
    二叉树遍历入门 Lebal:research
  • 原文地址:https://www.cnblogs.com/fenxiangyuan/p/14397626.html
Copyright © 2020-2023  润新知