Java学习day24-类的成员之五:内部类

一、内部类

1.在Java中,允许一个类的定义位于另一个类的内部,前者称为内部类,后者称为外部类。

2.Inner class 一般用在定义它的类或语句块之内,在外部引用它时,必须给出完整的名称。

  Inner class 的名字不能与包含它的类名相同。

3.Inner class 可以使用外部类的私有数据,因为它是外部类的成员,同一个类的成员之间可以互相访问。而外部类要访问内部类中的成员需要:内部类.成员  或者是  内部类对象.成员。

4.分类:成员内部类(static成员内部类和非static成员内部类)

    局部内部类(不谈修饰符)

    匿名内部类

5.内部类举例

package day15;

public class Test3 {
    int i;
    public int x;
    private int z;
    
    class A{//内部类
        int i;//内部类也可以有自己的属性,与外部类不冲突
        
        public void setTest3Fileds(){
            Test3.this.i = 1;
            Test3.this.x = 2;
            Test3.this.z = 3;//内部类可以调用外部类的属性
        }
        
        public void set(){//内部类调用自己属性的方法
            this.i = 10;
        }
    }
    
    public void setInfo(){//外部类调用自己属性
        new A().setTest3Fileds();//外部的类要用自己内部类的方法,要先new内部类的对象
    }
    
    public void showInfo(){
        System.out.println(this.i);
        System.out.println(this.x);
        System.out.println(this.z);
    }
    
    public static void main(String[] args){
        Test3 t = new Test3();
        t.setInfo();
        t.showInfo();
    }
}

打印结果为:

1
2
3

二、内部类特性

1.Inner class 作为类的成员:

  ①可以声明为final的

  ②和外部类不同,Inner class 可声明为private或protected

  ③Inner class 可以声明为static的,但此时就不能再使用外层类的非static的成员变量

  ④Inner class作为类:可以声明为abstract类,因此可以被其他的类继承

  注意:非static的内部类中的成员不能声明为static的,只有在外部类或static的内部类中才可声明static成员。

package day15;

public class Test3 {
    int i;
    public int x;
    private int z;
    
    class A{//内部类
        
    }
    
    //可以有多个内部类,可以是final的
    final class B{
        
    }
    
    //内部类可以声明为抽象类
    abstract class C{
        
    }
    
    //如果内部类是static的,就不能使用外部的非static成员
    static class D{
        
    }
    
    //内部类可以被继承
    class E extends C{
        
    }

问题:内部类有什么用?

答:内部类主要是解决Java不能多层继承的问题。

package day15;

public class Test4 {
    public static void main(String[] args){
        A a = new A();
        a.testB();
        a.testC();
    }
    
}

/**
 * 现在类A想要同时的获得类B和类C的方法,并且重写
 * 可以使用内部类来变相的实现类的多重继承,可以同时继承多个类
 * */
class A{
    
    public void testB(){
        new InnerB().testB();
    }
    
    public void testC(){
        new InnerC().testC();
    }
    
    private class InnerB extends B{
        public void testB() {
            // TODO Auto-generated method stub
            System.out.println("这是重写之后的testB方法");
        }
    }
    
    private class InnerC extends C{
        public void testC() {
            // TODO Auto-generated method stub
            System.out.println("这是重写之后的testC方法");
        }
    }
    
}

class B{
    public void testB(){
        
    }
}

class C{
    public void testC(){
        
    }
}

内部类的最大作用就是实现多重继承。

三、面向对象总结

猜你喜欢

转载自www.cnblogs.com/su-peng/p/12538528.html
今日推荐