zoukankan      html  css  js  c++  java
  • JAVA_基础内部类

    内部类

    java允许将一个类A声明在另一个类B中,则类A就是内部类,类B称为外部类

    内部类的分类:成员内部类(静态内、非静态内) VS 局部内部类(方法内、代码块内、构造器内)
    外部类的成员
    1)调用外部类的机构。
    2)可以用被static修饰。
    3)可以被四种不同的权限修饰。

    作为一个类
    1)类内可以定义属性、方法、构造器等。
    2)可以被final修饰,表示此类不能被继承。言外之意,不使用final就可以被继承。
    3)可以被abstract修饰,表示此类不能被实例化。与上面同理,不使用abstract就能被实例化。

    关注如下三个问题
    1)如何实例化成员内部类的对象。
    2)如何在成员内部类中区分调用外部类的结构。

    public class InnerClassTest {
    	public static void main(String[] args) {
    //		创建Dog实例(静态的成员内部你)
    		Person.Dog dog = new Person.Dog();
    		dog.show();
    		
    //		创建Bird实例(非静态的成员内部类)
    		Person person = new Person();
    		Person.Bird bird = person.new Bird();
    		bird.sing();
    		System.out.println();
    		bird.display("黄鹂");
    	}
    }
    
    class Person{
    	
    	String name = "库森";
    	int age;
    	
    	public void ead() {
    		System.out.println("人:吃饭");
    	}
    	
    	//静态成员内部类
    	static class Dog {
    		String name;
    		
    		public Dog() {}
    		
    		public void show() {
    			System.out.println("卡拉沙狗");
    		}
    	}
    	
    	//非静态成员内部类
    	class Bird{
    		String name = "杜鹃";
    		
    		public Bird() {}
    		
    		public void sing() {
    			System.out.println("我是一只小小鸟");
    			//调用外部类的一个方法
    			Person.this.ead();	
    		}
    		public void display(String name) {
    			System.out.println(name);//方法形参
    			System.out.println(this.name);//内部类的name
    			System.out.println(Person.this.name);//外部类的name
    			System.out.println(age);//在没有重名的情况下可以直接调用外部类的成员属性
    		}
    	}
    	
        public Person() {
    		class CC {}//局部内部类
    	}
    	public void method() {
    		class AA {}//局部内部类
    	}
    	{
    		class BB {}//局部内部类
    	}
        //修饰内部类
    	abstract class Cat{}
    	final class Snake{}
    }
    

    ​ 3)开发中局部内部类的使用。

    public class InnerClassTest1 {
    	public Comparable getComparable() {
    //		方式一:
    		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;
    			}
    		};
    	}
    }
    
  • 相关阅读:
    yum 崩溃的解决方法
    线上mysql数据库删库恢复的案例
    CVE-2018-8120 WIN7 08提权漏洞exp
    CVE-2018-1111 劫持dhcp造成Redhat、centos代码执行
    关于 Python generator(生成器)的类比
    黯淡蓝点:旅行者号64亿公里外回望地球...
    raise RuntimeError("autoconf error") RuntimeError: autoconf error
    python 调取 shell 命令的几种方法
    struct 处理二进制
    linux 下日常使用便利工具
  • 原文地址:https://www.cnblogs.com/BeautifulGirl230/p/14228190.html
Copyright © 2011-2022 走看看