黑马程序员技术交流社区
标题: 内部类的疑问?? [打印本页]
作者: Friends★ 时间: 2012-4-23 11:11
标题: 内部类的疑问??
内部类的疑问(有的发懵了)
当内部类定义在外部类的成员位置上时,是可以直接访问外部类中的成员变量,但是我这个怎么不行,
内部类访问外部类中的成员变量,我可不可以像这样理解:(下面这个代码) 就是内部类中的show()方法通过调用,输出Inner=2;
的值呢!还有一点就是内部类访问外部类的时候,在主函数中时创建内部类对象还是外部类对象?
public class Test2 {
public static void main(String[] args) {
Outer ou= new Outer();//内部类访问外部类时创建哪个对象,外部的还是内部的
ou.method();
}
}
class Outer
{
private int x=2;
class Inner{
void show(){
System.out.println("Inner="+x);
}
}
void method(){
// Inner in=new Inner();
//in.show();
System.out.println("x="+x);
}
}
作者: 王勃 时间: 2012-4-23 11:30
大哥,你得将main函数写在Outer类中,虽说你的Test类也许和Outer在同一个包,但你觉得这是内部类访问外部类非静态变量的练习吗?
作者: Friends★ 时间: 2012-4-23 11:37
王明(1988) 发表于 2012-4-23 11:30
大哥,你得将main函数写在Outer类中,虽说你的Test类也许和Outer在同一个包,但你觉得这是内部类访问外部类 ...
大哥,你懂不懂啊,Outer类不是我后定义的嘛,主函数只是执行入口!
作者: 王勃 时间: 2012-4-23 11:48
本帖最后由 王明(1988) 于 2012-4-23 13:57 编辑
你的代码上的好看点啊,我写个你看是你说的意思不?- package com.heima;
- public class Chicken {
- private double weight;
-
- public Chicken() {}
- public Chicken(double weight) {
- this.weight = weight;
- }
-
- public void test() {
- ChickenLeg cl = new ChickenLeg(1.4, "火红色");
- cl.info();
- }
-
- //定义内部类ChickenLeg,我用private修饰,当然你想让其他包知道不用也ok
- private class ChickenLeg {
- private double lenght;
- private String color;
-
- public ChickenLeg() {}
- public ChickenLeg(double lenght, String color) {
- this.lenght = lenght;
- this.color = color;
- }
- public double getLenght() {
- return lenght;
- }
- public void setLenght(double lenght) {
- this.lenght = lenght;
- }
- public String getColor() {
- return color;
- }
- public void setColor(String color) {
- this.color = color;
- }
-
- //非静态内部类的实例方法
- public void info() {
- System.out.println("当前鸡腿的颜色是:"+color+",高是:"+lenght);
- //访问外部类的私有属性weight
- System.out.println("本鸡腿所属鸡的重量是:"+weight);
- }
- }
-
- public static void main(String[] args) {
- Chicken c = new Chicken(14.2);
- c.test();
- }
- }
复制代码
作者: 王勃 时间: 2012-4-23 11:50
习惯性的加set get 多了点,我没什么别的意思,解决你的问题,就好。{:soso_e100:}{:soso_e100:}
作者: 王勃 时间: 2012-4-23 11:58
你的没错,我运行了,为省事我将main写在outer中了。
上图:- package com.heima;
- public class Outer {
- public static void main(String[] args) {
- Outer ou = new Outer();// 内部类访问外部类时创建哪个对象,外部的还是内部的
- ou.method();
- }
- private int x = 2;
- class Inner {
- void show() {
- System.out.println("Inner=" + x);
- }
- }
- void method() {
- //是想用下面的两句吧。。。不过你在method成员方法中new对象不好,最好在main中new吧
- Inner in = new Inner();
- in.show();
- // System.out.println("x="+x);
- }
- }
复制代码 结果:
作者: 王勃 时间: 2012-4-23 11:58
结果为:
作者: 王勃 时间: 2012-4-23 12:03
大哥,你懂不懂啊,Outer类不是我后定义的嘛,主函数只是执行入口!
亲,不要讽刺哥,看不懂程序入口,之前做过javaEE,android程序员,只不过对公司不满意,想通过黑马找个好公司而已。
作者: Friends★ 时间: 2012-4-23 12:13
王明(1988) 发表于 2012-4-23 12:03
亲,不要讽刺哥,看不懂程序入口,之前做过javaEE,android程序员,只不过对公司不满意,想通过黑马找个好 ...
那你岂不是黑马牛人!不过学习了,感谢回答!
作者: 王勃 时间: 2012-4-23 13:56
、、、、
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |