码迷,mamicode.com
首页 > 编程语言 > 详细

java之内部类

时间:2019-12-17 20:31:06      阅读:88      评论:0      收藏:0      [点我收藏+]

标签:现在   xtend   外部类   变量   之间   pre   div   类的成员   ring   

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

Inner class一般用在定义它的类或语句块之内,在外部引用它时必须给出完整的名称,Inner的名字不能与包含它的类名相同;

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

分类:成员内部类(static成员内部类和非static成员内部类)、局部内部类(不带修饰符)、匿名内部类

Test.java

package fac;

public class Test {
    int i;
    public int j;
    private int k;
    class A{
        int i;
        public void setTestFields() {
            Test.this.i = 1;
            Test.this.j = 2;
            Test.this.k = 3;
        }
        public void set() {
            this.i = 4;
        }
        public void get() {
            System.out.println(this.i);
        }
    }
    public void seInfo() {
        new A().setTestFields();
    }
    public void showInfo() {
        System.out.println(this.i);
        System.out.println(this.j);
        System.out.println(this.k);
    }
    public static void main(String[] args) {
        Test t = new Test();
        t.seInfo();
        t.showInfo();
        Test.A a = t.new A();
        a.set();
        a.get();
    }
}

输出:

1

2

3

4

内部类特性:

  • 可以声明为final;
  • 和外部类不同,Inner class可声明为private和protected;
  • inner class可以声明为static,但此时就不能再使用外层类的非static的成员变量;
  • 可以声明为abstract类,因此可以被其它内部类所继承;

内部类的作用是什么?

主要是解决Java不能多重继承。

package fac;

public class Test2 {
    
    public static void main(String[] args) {
        //现在类A可以获得类B和类C的方法
        A a = new A();
        a.testB();
        a.testC();
    }
}
    
class A{
    
    public void testB() {
        new InnerB().testB();
    }
    public void testC() {
        new InnerC().testC();
    }
    
    private class InnerB extends B{
        public void testB(){
            System.out.println("这是重写之后的B方法");
        }
    }
    private class InnerC extends C{
        public void testC(){
            System.out.println("这是重写之后的C方法");
        }
    }
    
}
class B{
    public void testB(){
    
}}
class C{
    public void testC(){
    
}}

输出:

这是重写之后的B方法
这是重写之后的C方法

java之内部类

标签:现在   xtend   外部类   变量   之间   pre   div   类的成员   ring   

原文地址:https://www.cnblogs.com/xiximayou/p/12056321.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!