Java面向对象基础--内部类

1、什么是内部类?

一个类中还存在另外一个类,则成为内部类。

class Outer{		// 定义外部类
	private String info = "hello world" ;	// 定义外部类的私有属性
	class Inner{	// 定义内部类
		public void print(){				// 定义内部类的方法
			System.out.println(info) ;		// 直接访问外部类的私有属性
		}
	};
	public void fun(){						// 定义外部类的方法
		new Inner().print() ;				// 通过内部类的实例化对象调用方法
	}
};
public class InnerClassDemo01{
	public static void main(String args[]){
		new Outer().fun() ;					// 调用外部类的fun()方法
	}
};

使用内部类的优点:可以方便的访问外部类中的私有属性。

2、使用static声明内部类

如果一个内部类使用static声明,则此内部类就成为外部类,可以直接通过外部类.内部类进行访问。

class Outer{		// 定义外部类
	private static String info = "hello world" ;	// 定义外部类的私有属性
	static class Inner{	// 使用static定义内部类为外部类
		public void print(){				// 定义内部类的方法
			System.out.println(info) ;		// 直接访问外部类的私有属性
		}
	};
	public void fun(){						// 定义外部类的方法
		new Inner().print() ;				// 通过内部类的实例化对象调用方法
	}
};
public class InnerClassDemo03{
	public static void main(String args[]){
		new Outer.Inner().print() ;					// 调用外部类的fun()方法
	}
};

使用static关键字声明的内部类,就称为了外部类,可以直接在类的外部调用。但是,要访问外部类中的属性,则必须是static访问权限。

3、在其他类中访问内部类

一个内部类除了可以通过外部类访问,还可以在其他类中调用。其格式为:

外部类.内部类  内部类对象 = 外部类实例 .new 内部类();

class Outer{		// 定义外部类
	private String info = "hello world" ;	// 定义外部类的私有属性
	class Inner{	// 定义内部类
		public void print(){				// 定义内部类的方法
			System.out.println(info) ;		// 直接访问外部类的私有属性
		}
	};
	public void fun(){						// 定义外部类的方法
		new Inner().print() ;				// 通过内部类的实例化对象调用方法
	}
};
public class InnerClassDemo04{
	public static void main(String args[]){
		Outer out = new Outer()	;			// 外部类实例化对象
		Outer.Inner in = out.new Inner() ;	// 实例化内部类对象
		in.print() ;						// 调用内部类的方法
	}
};

4、在方法中定义内部类

class Outer{		// 定义外部类
	private String info = "hello world" ;	// 定义外部类的私有属性
	public void fun(final int temp){		// 定义外部类的方法
		class Inner{						// 在方法中定义的内部类
			public void print(){				// 定义内部类的方法
				System.out.println("类中的属性:" + info) ;		// 直接访问外部类的私有属性
				System.out.println("方法中的参数:" + temp) ;
			}
		};
		new Inner().print() ;				// 通过内部类的实例化对象调用方法
	}
};
public class InnerClassDemo05{
	public static void main(String args[]){
		new Outer().fun(30) ;	// 调用外部类的方法
	}
};
时间: 2024-09-22 03:17:41

Java面向对象基础--内部类的相关文章

Java面向对象基础--类的设计及分析问题的方法---用户登录例子

1.用户登录的示例 首先要做的就是先把功能实现: public class LoginDemo01{ public static void main(String args[]){ if(args.length!=2){ // 应该判断输入的参数个数是否是2 System.out.println("输入的参数不正确,系统退出!") ; // 给出一个正确的格式 System.out.println("格式:java LoginDemo01 用户名 密码") ; Sy

Java面向对象基础---名词概念的理解:方法的重载、构造函数、封装性

方法的重载:方法名称相同,但参数的类型和个数不同,通过传递参数的个数及类型不同以完成不同功能的方法调用. 例如:System.out.println();属于方法的重载. 方法的重载一定是根据参数类型和个数来判断的. 构造函数:构建创造对象时调用的函数.作用:可以给对象进行初始化.Tip:函数名与类名相同,不用定义返回值类型,没有具体的返回值.   面向对象特征:1.封装(encapsulation)对外部不可见,保护程序的某些内同.2.继承性(inheritance)扩展功能.3.多态(pol

Java面向对象基础--链表的改进

采用内部类完成链表的操作 1.增加节点,在链表的最后进行增加 class Link{ // 链表的完成类 class Node{ // 保存每一个节点,此处为了方便直接定义成内部类 private String data ; // 保存节点的内容 private Node next ; // 保存下一个节点 public Node(String data){ this.data = data ; // 通过构造方法设置节点内容 } public void add(Node newNode){ /

Java面向对象基础--构造方法

只要一有对象实例化,就会调用此方法.   在整个JAVA的操作中,如果一个类中,没有明确的声明一个构造方法,则会自动产生一个没有参数的,什么都不做的构造方法,供用户使用.       构造方法的主要目的:就是为类中的属性进行初始化: 匿名对象:没有名字,在java中,如果一个对象只使用一次,就可以将其定义成匿名对象. 总结: 对象在实例化的时候,必须调用构造方法: 每个类中至少有一个构造方法: 匿名对象,只开辟了堆内存的实例对象:    

Java面向对象基础--引用传递分析

class Demo{ int temp = 30 ; // 此处为了方便,属性暂时不封装 }; public class RefDemo01{ public static void main(String args[]){ Demo d1 = new Demo() ; // 实例化Demo对象,实例化之后里面的temp=30 d1.temp = 50 ; // 修改temp属性的内容 System.out.println("fun()方法调用之前:" + d1.temp) ; fun

Java面向对象基础--构造方法私有化

1.对构造方法进行封装 class Singleton{ private Singleton(){ // 将构造方法进行了封装,私有化 } public void print(){ System.out.println("Hello World!!!") ; } }; 2.使用 被私有化构造方法的Singleton类,不能在外部直接实例化. class Singleton{ private Singleton(){ // 将构造方法进行了封装,私有化 } public void pri

Java面向对象基础--this关键字的解析

this关键字的作用: 1.表示类中的属性. class Person{ // 定义Person类 private String name ; // 姓名 private int age ; // 年龄 public Person(String name,int age){ // 通过构造方法赋值 this.name = name ; // 为类中的name属性赋值 this.age = age ;// 为类中的age属性赋值 } public String getInfo(){ // 取得信息

Java面向对象基础--代码块

1.普通代码块 public class CodeDemo01{ public static void main(String args[]){ { // 普通代码块 int x = 30 ; // 就属于一个局部变量 System.out.println("普通代码块 --> x = " + x) ; } //int x = 100 ; // 与局部变量名称相同 System.out.println("代码块之外 --> x = " + x) ; }

java面向对象基础_final详细介绍_java

final: 继承的弊端:打破了代码的封装性,final的出现正好弥补了这一弊端 final关键字: 1-final是一个修饰符,可以修饰类,方法,变量; 2-final修饰的类不能被继承 3-final修饰的方法不可以被覆盖 4-final修饰的变量是一个常数,只能被赋值一次并且要在定义时就将其赋予某值 规则: 被定义final的常量要用大写字母表示,各单词之间用下划线_来隔开. 实例一: class Father01{ final String FATHER01_NAME = "张三&quo