• 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;
    			}
    			
    		};
    		
    	}
    	
    }
    
  • 相关阅读:
    [算法学习] 单调栈
    UVA11275 3D Triangles(三维几何)
    2019CCSU11月校赛 B,G题解
    2017-2018 ACM-ICPC Northern Eurasia (Northeastern European Regional) Contest (NEERC 17)(B,D)
    2016湖南省省赛 B 有向无环图(树形dp)
    2016湖南省省赛 J 三角形和矩形(计算几何)
    JAVA 高精度小数模板
    2019湖南省赛 K 双向链表练习题(list)
    2019 字节跳动 [编程题]最大映射(贪心)
    HDU 6740 MUV LUV EXTRA(kmp原理)
  • 原文地址:https://www.cnblogs.com/fenxiangyuan/p/14397626.html
Copyright © 2020-2023  润新知