day97_内部类
-
在Java中,允许在一个类定义在另一个类的里面,前者被称为内部类,后者为外部类;
-
内部类可以使用外部类的成员变量和方法,使用语法:
外部类名.this.成员变量名/方法名(); -
外部类使用内部类的变量和方法:
实例化内部类对象名.内部类的方法/变量名 -
内部类可以继承内部类/同一包下的类
-可以使用static修饰内部类,但是内部类就无法使用外部类中的非static成员变量和方法
package day08;
/**
* 2021年2月27日
* day97 内部类
*/
public class Test3 {
int i;
public int k;
private int l;
class A{
int i;
public void setTest3Filed() {
Test3.this.i = 0;
Test3.this.k = 15;
Test3.this.l = 45;
}
public void setA() {
this.i = 10;
}
}
public void setTest3Ifo() {
new A().setTest3Filed();//外部类要使用内部类的方法和变量则要new一个内部类的对象
}
public void showInfo() {
System.out.println(i);
System.out.println(l);
System.out.println(k);
}
//内部类可以继承另一个内部类
public class C{
}
class D extends C{
}
//可以用关键词static修饰内部类,但是就不可以用外部类的非static成员变量和方法了
static class B{
}
public static void main(String[] args) {
Test3 t = new Test3();
t.setTest3Ifo();
t.showInfo();
}
}
内部类的存在意义:主要是解决Java不能多重继承的问题
/**
*
*/
package day08;
/**
* @author Abu
* 2021年2月27日
* day97_内部类存在的理由
*/
public class Test4 {
public static void main(String[] args) {
A a = new A();
a.getB1();
a.getC();
}
}
//让A获取到B和C的方法并重写,因为不能实现多重继承,所以可以使用多个内部类来实现多个继承
class A{
private class InnerB1 extends B1{
@Override
public void testB1() {
System.out.println("这是内部类InnerB1的testB1方法");
}
}
private class InnerC extends C{
@Override
public void testC() {
System.out.println("这是内部类InnerC的testC方法");
}
}
public void getB1(){
new InnerB1().testB1();
}
public void getC(){
new InnerC().testC();
}
}
class B1{
public void testB1() {
}
}
class C{
public void testC() {
}
}