内部类和外部类的实例变量可以共存

成员内部类:作为外部类的一个成员存在,与外部类的属性、方法并列。

内部类和外部类的实例变量可以共存。

在内部类中访问实例变量:this.属性

在内部类访问外部类的实例变量:外部类名.this.属性。

成员内部类的优点:

⑴内部类作为外部类的成员,可以访问外部类的私有成员或属性。(即使将外部类声明为PRIVATE,但是对于处于其内部的内部类还是可见的。)

⑵用内部类定义在外部类中不可访问的属性。这样就在外部类中实现了比外部类的private还要小的访问权限。

注意:内部类是一个编译时的概念,一旦编译成功,就会成为完全不同的两类。

对于一个名为outer的外部类和其内部定义的名为inner的内部类。编译完成后出现outer.class和outer$inner.class两类。

 1 package TomText;
 2 //用其创建对象,并对创建的对象个数计数。
 3 public class TomText_41 {
 4     private static int i;
 5     private String name;
 6     private int age;
 7     TomText_41(String n,int a){
 8             name=n;
 9             age=a;
10             i++;
11             speak();
12     }
13     void speak(){
14             System.out.println("我是第"+i+"个人,名叫"+name+",年龄"+age+"岁");
15     }
16     public static void main(String [ ] args){
17         TomText_41 p1=new TomText_41("李大强",20);
18         TomText_41 p2=new TomText_41("张晓明",22);
19         TomText_41 p3=new TomText_41("王金宝",18);
20     }
21
22 }

原文地址:https://www.cnblogs.com/borter/p/9419357.html

时间: 2024-10-07 15:21:13

内部类和外部类的实例变量可以共存的相关文章

java:内部类与外部类的区别和联系

注意事项一:在内部类中可以随意使用外部类的成员方法以及成员变量. 众所周知,在定义成员方法或者成员变量的时候,可以给其加上一些权限的修饰词,以防止其他类的访问.如在成员变量或者成员方法前面,加上Private 关键字,则其他类就无法调用这个类中的成员方法或则和成员变量.但是,如果这个类有成员内部类,则不受这方面的限制.也就是说,在成员内部类中可以随意引 用外部类的成员方法以及成员变量,即使这些类成员方法或者成员变量被修饰了private.如在成员外部类中定义了一个i变量,并且利用private关

内部类和外部类之间的相互调用

内部类: ①静态内部类中可以有非静态的方法 ②当内部类中有静态方法或者静态成员变量时,一定是静态内部类 一般内部类在外部类的成员变量位置,像这样: 1 public class Outer { 2 class Inner{ 3 4 } 5 } 1.外部类访问内部类: 内部类被static修饰:可以直接new Inner in = new Inner(); 内部类没有被static修饰:得先new出来外部类的实例,再new内部类的 Inner in = new Outer().new Inner(

内部类访问外部类的变量必须是final吗,java静态方法中不能引用非静态变量,静态方法中不能创建内部类的实例

内部类访问外部类的变量必须是final吗? 如下:class A{int i = 3;public void shout(){ class B{public void shout1(){System.out.println(i);} }B b=new B();b.shout1();} public static void main(String [] args){A a=new A();a.shout();} }可正常输出3,证明可以访问类的变量i,但改为下面的方式:class A{public

创建内部类的实例对象,必须创建外部类的实例对象

Outer类中定义了一个成员内部类Inner,需要在main()方法中创建Inner类实例对象,方法:Outer.Inner in  = new Outer().new Inner(); 内部类可以引用全局变量; 静态方法创建实例内部类对象 内部类的最重要的一个特点就是它可以直接访问它外部类的成员变量.成员变量是 对象身上的.对象创建完成了,才会为成员变量分配空间.能调用成员变量, 意味着一定有了实例对象. main方法是静态的,它执行的时候可以不用创建那个对象.这就矛盾了. main方法运行的

Java内部类持有外部类的引用详细分析与解决方案

在Java中内部类的定义与使用一般为成员内部类与匿名内部类,他们的对象都会隐式持有外部类对象的引用,影响外部类对象的回收. GC只会回收没有被引用或者根集不可到达的对象(取决于GC算法),内部类在生命周期内始终持有外部类的对象的引用,造成外部类的对象始终不满足GC的回收条件,反映在内存上就是内存泄露.(如,Android中Activity的内存泄露) 解决方案为 1.将内部类定义为static 2.用static的变量引用匿名内部类的实例 测试代码 class Outer { class Inn

Java内部类引用外部类中的局部变量为何必须是final问题解析

今天编写一个多线程程序,发现在方法内定义内部类时,如果内部类调用了方法中的变量,那么该变量必须申明为final类型,百思不得其解,后来想到应该 是生命周期的原因,因为方法内定义的变量是局部变量,离开该方法,变量就失去了作用,也就会自动被消除,而内部类却不会离开它所在方法就失去作用,它有更 广的生命周期,下面通过一个实例加以说明: 如例中所示,在外部类Outer中声明了一个内部类TimerPrint,这个类中的方法引用了方法start中的一个局部变量testTxt 逻辑上:因为该内部类出现在一个方

Java内部类与外部类的那些事

昨天去笔试的时候遇到了Java的内部类的创建方式与访问权限的问题,我不懂,没写,故今天起来特意去试验一下,就有了这篇总结性的文章. Java中的内部类又分为非静态内部类(匿名内部类也是非静态的内部类)和静态内部类,两者与外部类的关系是不一样的,创建的方式也不一样. 1 非静态内部类 Java的非静态内部类在构造的时候,会将外部类的引用传递进来,并且作为内部类的一个属性,因此,内部类会隐式地持有其外部类的引用.也就是非静态内部类在构造的时候需要有一个外部类的实例传递进来进行构造,不能像普通的Jav

内部类修改外部类属性(转:http://demojava.iteye.com/blog/1075571)

public class Test {  public String demo="qw4rqwer";  public void changValue() {  this.demo=" hello word"; } class DemoOuterclass {   public  DemoOuterclass()   {    changValue();   } } public static void main(String[] args) {  Test t=n

内部类和 外部类相互访问

内部类: ①静态内部类中可以有非静态的方法 ②当内部类中有静态方法或者静态成员变量时,一定是静态内部类 1.外部类访问内部类: 内部类被static修饰:可以直接new Inner in = new Inner(); 内部类没有被static修饰:得先new出来外部类的实例,再new内部类的 Inner in = new Outer().new Inner(); 2.内部类访问外部类:(外部类.this.变量) 3.外部类和内部类中的方法相互访问: ①外部类的静态方法test和非静态内部类的非静