java 在内部类返回_Java内部类在实际开发中的应用体现

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

定义:放在一个类的内部的类我们就叫内部类。

在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号。

内部类是一个编译时的概念,一旦编译成功,就会成为完全不同的两类。对于一个名为outer的外部类和其内部定义的名为inner的内部类。编译完成后出现outer.class和outer$inner.class两类。所以内部类的成员变量/方法名可以和外部类的相同。

内部类可以是静态static的,也可用public,default,protected和private修饰。(而外部顶级类即类名和文件名相同的只能使用public和default分类:1.成员内部类 2.静态内部类 3.匿名内部类 4.方法内部类(几乎不用)

作用:间接解决多重继承的问题(内部类继承一个类,外部类继承一个类,实现多继承。最重要的作用);

内部类拥有外围类的所有元素的访问权限;

成员内部类,顾名思义,就是在一个类的内部定义一个类,作为类的一个成员属性(成员字段),类的成员内部类可以访问该类的属性和方法,因为他也是该类的一个成员。

要注意的是,成员内部类不能含有static的变量和方法。因为成员内部类需要先创建了外部类,才能创建它自己的,了解这一点,就可以明白更多事情,在此省略更多的细节了。

疯狂软件Java培训。疯狂软件Java课程打造名企技术经理,成为中国软件产业的中流砥柱:全真企业需求,项目小组管理,大量实操项目的疯狂训练,企业全真案例教学,学成至少相当于两年工作经验“全真项目”教学,

上代码:

package 内部类.成员内部类;

public class Person {

public void sayPerson(){

System.out.println("helloPerson");

}

}

package 内部类.成员内部类;

public class Student extends Person {

private int age;

public int getAge(){

return age;

}

public void say(){

System.out.println("helloStudent");

}

private Grade1 getGrade1() {

return new Grade1(); //建议用这种方式实例化

}

private class Grade1{

public void say(){

Student.this.sayPerson();//内部类调用外部类的成员

Student.this.say();

System.out.println(Student.this.getAge());

System.out.println("helloGrade1");

}

}

public static void main(String[] args) {

Student stu = new Student();

Student.Grade1 grade1 = stu.getGrade1();

//Student.Grade1 grade2 = stu.new Grade1();两种实例化内部类的方式

grade1.say();

}

}

静态内部类:顾名思义内部类是静态的,这样的好处是不用拿到外部类对象就可以实例化内部类了,但是这样的话,内部类就不能引用外部类的非静态成员了

上代码 eg:HashMap 中的 Entry

package 内部类.静态内部类;

public class Test {

public int age=1;

public static Stringname="shaolin";

static class Baby{ //静态内部类

public void say()

{

//System.out.println(age);不能访问age属性,只能访问静态属性(很容易理解)

System.out.println("hello"+name);

}

}

public static void main(String[] args) {

Test.Baby temp=new Test.Baby(); //实例化静态内部类

temp.say();

}

}

匿名内部类,顾名思义就是没有名字的内部类

package 内部类.匿名内部类;

public class Test {

public static void main(String[] args) {

//相当继承Mother类并实现抽象方法

Person person=new Person(){

@Override

public void say() {

System.out.println("hello,匿名内部类");

}

};

person.say();

}

}

abstract class Person{ //也可以是一个interface的

public abstract void say();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值