菜鸟笔记
提升您的技术认知

java内部类-ag真人游戏

内部类基础

在java中支持在一个类中定义另一个类,这样的类称作内部类,而包含内部类的类称为内部类的外嵌类。广义上我们将内部类分为四种:成员内部类、静态内部类、局部(方法)内部类、匿名内部类。

//外嵌类
class outer{
//内部类
    class inter{
    }
}

使用内部类的原因

在java中不能够实现多继承,而内部类具有类的基本特征(既可以继承父类又可以实现接口),这样就可以间接地解决类无法多继承地问题。

public class a extend b implements c{
    public class d extends e implements f{
        
    }
}

当然,内部类还有其他的优点:

​
//1、内部类可以用多个实例,每个实例都有自己的状态信息,并且与其他外围对象的信息相互独立。
//2、内部类并没有令人迷惑的“is-a”关系,他就是一个独立的实体。
//3、内部类提供了更好的封装,除了该外围类,其他类都不能访问。
//4、创建内部类对象的时刻并不依赖于外围类对象的创建。
//5. 外部类加载时并不需要立即加载静态内部类,内部类不被加载则不用去初始化,故而不占内存。
​//6. 内部类的方法和成员属性可以与外嵌类相同,内部类具有独立的个体,可以使用访问权限隐藏内部类的实施细节,实现更好的封装。

public class innerdemo2 {
    class a{
        private int a;
        private void seta(int b){
            a = b;
        }
        private int geta(){
            return a;
        }
    }
    public static void main(string[] args) {
        innerdemo2 inner = new innerdemo2();
        innerdemo2.a a1 = new innerdemo2().new a();
        a1.seta(10);
        system.out.println(a1.geta());
    }
}

成员内部类

成员内部类是最普通的内部类,可以被任意权限修饰符修饰,具有类的基本特征,它可以直接访问外部类的成员。但是外部类想访问内部类的成员便需要先创建一个内部类的对象,再通过这个对象的引用进行放问。

创建内部类的对象有两种方法:

第一种方法如下面的代码所示,先声明一个内部类对象,然后在构造方法中创建内部类的对象的实例。

class redcowform{
	static string formname;
	redcow cow;
	redcowform(){
		
	}
	redcowform(string s){
		cow = new redcow(150,112,5000);
		formname = s;
	}
	void showcowmess() {
		cow.speak();
	}
	class redcow{
		string cowname = "红牛";
		int height,weight,price;
		redcow(int h,int w,int p){
			height = h;
			weight = w;
			price = p;
		}
		void speak() {
			system.out.println("偶是" cowname ",身高:" height "cm 体重:" weight "kg 生活在" formname);
		}
	}
}
public class java7 {
	public static void main(string[] args) {
		redcowform form = new redcowform("红牛农场");
		form.showcowmess();
		form.cow.speak();
	}
}

第二种则如下:

当内部类为非静态方法时
//外部类.内部类 内部类对象 = new 外部类().new 内部类();
当内部类为静态方法时
//外部类.内部类 内部类对象 = new 外部类.内部类();

需要注意的是:当成员内部类与外部类有同名的变量或方法时,外部类的同名方法或变量会被隐藏。

需要以下面的形式进行访问。

外部类.this.成员变量
外部类.this.成员方法

静态内部类

静态内部类也可以被任意的权限修饰符修饰,静态内部类不可以使用任何外部类的非static属性和方法

class outer1{
	private static string name = "test";
	public static int age = 20;
	static class inner{
		public static int num=10;
		public void fun() {
			system.out.println(name);
			system.out.println(age);
		}
	}
}
public class outdemo3 {
	public static void main(string[] args) {
			
	}
}

方法内部类

方法内部类也叫局部内部类,存在与方法之中,不能被访问权限修饰符修饰。


class e{
	outer.inner inner = new outer.inner();
    void show(outer o){
    	inner.a();
        o.a();
    }
}
class outer{
	int b=10;
    public void a(){
        system.out.println("外部类");
    }
    public void e() {
    	final int n=10;
    	class k{
    		public static int ab(int a){
    			a=n;
    			return a;
    		}
    	}
    		system.out.println(k.ab(20));
    }
    static class inner{
    	static int a;
        public static void b(){
            system.out.println("内部类");
        }
        public void a(){
            system.out.println("内部类");
        }
    }
}
public class innerdemo1 {
    public static void main(string[] args) {
        outer.inner inner = new outer.inner();
        outer outer = new outer();
        outer.a();
        inner.a();
        e e = new e();
        e.show(new outer(){
            public void a(){
                system.out.println("a");
            }
        });
        e.show(outer);
        outer.inner.b();
        outer.e();
    }
}

匿名内部类

匿名内部类应该是平时我们编写代码时用得最多的,使用匿名内部类不但方便,而且使代码更加容易维护。

public class demo {
    private runnable runnable = new runnable() {
        @override
        public void run() {}
    }
}
网站地图