栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java面向对象 内部类

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java面向对象 内部类

回顾static关键字:
①static可以修饰属性、方法、代码块、内部类;
②static不可以修饰构造器

内部类


代码理解:

package com.atguigu.java3;

public class InnerClassTest {
	public static void main(String[] args) {
		//①如何实例化成员内部类的对象
		//创建Dog实例(静态的成员内部类)
		Person.Dog dog=new Person.Dog();     //注意格式
		dog.show();    //卡拉是条狗
		//创建Bird实例(非静态的成员内部类)------>注意此处为非静态
		Person p= new Person();
		Person.Bird bir=p.new Bird();   // 有了对象之后通过对象调用内部结构
		bir.Sing();   //我是一只小小鸟  干饭
		
		System.out.println("*********");
		bir.display("黄鹂");
	}
}

class Person{  //外部类
	String name="小明";   //外部类name属性
	int age;
	public void eat(){
		System.out.println("干饭");
	}
	
	//静态成员内部类
	static class Dog{ //内部类可以被static修饰(普通类不能使用static修饰)
		String name;
		int age;
		public void show(){
			System.out.println("卡拉是条狗");
//			eat();  //注意:此处注释打开会报错,eat()为非静态在内存中加载时间晚,而此类为静态要先加载,所以不能调用
		}
		
	}
	//非静态成员内部类
	class Bird{   
		String name="杜娟";     //内部类name属性
		public Bird(){
			
		}
		public void Sing(){
			System.out.println("我是一只小小鸟");
			//调用外部类的结构(此处调用的是非静态属性)
			eat();  //内部类和外部类没有重名,可以省略,完整为:Person.this.eat();表示Person类对象的eat()方法
		}
		//有属性重名时怎么调用:
		public void display(String name){ //形参name
			System.out.println(name);  //调用形参
			System.out.println(this.name);   //调用内部类属性 ,this调用的是display方法所在类的name
			System.out.println(Person.this.name);   //调用外部类属性,Person里的name
		}
	}
	
	public void method(){
		//局部内部类(方法内)
		class AA{
			
		}
	}
	//局部内部类(代码块内)
	{
		class BB{
			
		}
	}
	//局部内部类(构造器内)
	public Person(){
		class CC{
			
		}
	}
	
}


开发中局部内部类的使用:

package com.atguigu.java3;
//  开发中局部内部类的使用
public class InnerClassTest1 {
	//此即为局部内部类
	public void method(){
		//局部内部类
		class AA{	
		}
	}	
	//开发中较为常见的应用场景
	public Comparable getComparable(){    //此方法返回一个实现了Comparable接口的实现类的对象。Comparable是一个接口		
		//创建一个实现了Comparable接口的类--->局部内部类
		//方式一:标准方式
//		class MyComparable implements Comparable{
//			@Override    //重写接口中的抽象类方法
//			public int compareTo(Object o) {
//				return 0;
//			}
//		}
//		return new MyComparable();
		//方式二:匿名方式:创建一个实现Comparable接口的匿名实现类的匿名对象
		return new Comparable(){
			@Override
			public int compareTo(Object o) {
				return 0;
			}
		};
	}
}

局部内部类使用的一个注意点:

package com.atguigu.java3;

public class InnerClass3 {

	public void method(){
		int num=10;  //完整为:final int num=10;
		//局部内部类
		class  AA{
			public void show(){
//				num=20;  此处注释打开会报错,原因是num实际上是final修饰的
				System.out.println(num);
			}
		}
	}
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/782310.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号