内部类介绍:
类的内部成员之五:内部类
-
JAVA中允许将一个类A声明在另一个类B中,则类A就是内部类,类B称为外部类;
-
内部类的分类:成员内部类(静态、非静态) and 局部内部类(方法内、代码块内、构造器内)
-
成员内部类:
一方面,作为外部类的成员
- 调用外部类的结构;
- 可以被static 修饰
- 可以被4种不同的权限修饰
另一方面,作为一个类
- 类内可以定义属性、方法、构造器
- 可以被final修饰,表示此类不能被继承。言外之意,不使用final就可以被继承
- 可以被abstract修饰
-
关注如下的 3个问题
4.1 如何实例化成员内部类的对象
4.2 如何在成员内部类中区分调用外 部类的结构
4.3 开发中局部内部类的使用
package com.myobjectoriented3.nonworking;
public class InnerClassTest {
public static void main(String[] args) {
//创建对象(static静态的成员内部类的对象)
Person33.Dog dog=new Person33.Dog();
dog.show();
//创建对象(动态的成员内部类的对象)
Person33 p=new Person33();
// Person33.Bird pBird=p.new Bird();
// pBird.sing();
//
//
// pBird.display("啄木鸟");
// 啄木鸟
// 鸟
// 赵子龙
p.method();
Person33 p2=new Person33();
}
}
/*
* 内部类:成员内部类/局部内部类
*
*
*
*/
class Person33{
String name="赵子龙";
int age;
public void eat() {
System.out.println("人类可以吃饭");
}
//静态成员内部类
static class Dog{
String name="狗子";
int age;
public Dog() {
}
public void show() {
System.out.println("狗子可以叫");
}
}
//动态成员内部类
class Bird{
String name="鸟";
public void sing() {
System.out.println("鸟儿可以唱歌");
//Person33.this.eat();
}
public void display(String name) {
System.out.println(name);//形参
System.out.println(this.name);//内部类的名字
System.out.println(Person33.this.name);//外部类的名字
}
}
//局部内部类(方法内,代码块内,构造器内)
public comparaA getcomparaA(){
class compara implements comparaA{
public void show() {
System.out.println("say:A");
}
}
//return new compara();// 方式一
return new compara() {//方式二
public void show() {
System.out.println("say:A");
}};
}
{
class B{
double length;
public void getLength() {
System.out.println("长度是"+length);
}
}
}
public Person33(){
class C{
String classname="计算机科学";
public void getClassname() {
System.out.println("课程名字:"+classname);
}
}
}
}
开发中局部内部类的使用:
package com.myobjectoriented3.nonworking;
public class InnerClassTest1 {
//方式一 :非匿名实现类的匿名对象
public Comparable getComparable() {
class myComparable implements Comparable{
@Override
public int compareTo(Object o) {
// TODO Auto-generated method stub
return 0;
}
}
return new myComparable();
}
//方式二 匿名实现类的匿名对象
public Comparable getComparable1() {
return new Comparable() {
@Override
public int compareTo(Object o) {
// TODO Auto-generated method stub
return 0;
}
};
}
}