14.内部类
14.1 知识点
Java中的内部类
// 外部类
public class Lesson14_Outer {
private int i = 1;
public String str = "123";
public Inner i1 = new Inner();
public void Eat() {
}
public void Speak() {
}
// 在一个类里声明的类 一般称为 内部类
public class Inner {
public int i = 2;
public void Test() {
// 外部类中的所有内容(包括私有)都可以直接在内部类中使用
// 内部类和外部类中的同名成员,通过this 和 外部类.this来区分
int i = 3;
System.out.println(i); // 3
System.out.println(this.i); // 2
System.out.println(Lesson14_Outer.this.i); // 1
// System.out.println(str);
i = 10;
str = "韬老狮";
// System.out.println(i);
// System.out.println(str);
}
}
}
// 注意:Java中的内部类的使用和C#中不同
// 1.Java中的内部类在外部使用时必须伴随包裹它的外部类的出现而出现 C#不用
// 声明语法为
// 外部类 outer = new 外部类();
// 外部类.内部类 inner = outer.new 内部类();
Lesson14_Outer outer = new Lesson14_Outer();
Lesson14_Outer.Inner inner = outer.new Inner();
inner.Test();
// 2.外部类中的所有内容(包括私有)都可以直接在内部类中使用
// 3.内部类和外部类中的同名成员,通过this 和 外部类.this来区分
匿名内部类
public abstract class Lesson14_Test {
public abstract void Test1();
public abstract void Test2();
}
// 匿名内部类,在声明一个类对象时临时拓展该对象
// 但是拓展的内容一般是基于外部类的
// 注意:
// 1.不能写构造方法
// 2.不能定义静态成员
// 3.一般基于外部类已有方法实现内容
// 4.如果匿名类创建的对象不记录,用完一次后会马上被销毁
// 声明匿名类继承重写
Lesson14_Outer outer2 = new Lesson14_Outer() {
@Override
public void Eat() {
System.out.println("吃东西");
}
@Override
public void Speak() {
System.out.println("说话");
}
};
outer2.Eat(); // 吃东西
outer2.Speak(); // 说话
// 匿名类继承重写抽象类
Lesson14_Test tt = new Lesson14_Test() {
@Override
public void Test1() {
System.out.println("111");
}
@Override
public void Test2() {
System.out.println("222");
}
};
tt.Test1(); // 111
tt.Test2(); // 222
总结
Java中的内部类和C#中区别较大,在使用时一定要注意他们的区别之处:
- Java中的内部类在外部使用时必须伴随包裹它的外部类的出现而出现。
- 外部类中的所有内容(包括私有)都可以直接在内部类中使用。
- 内部类和外部类中的同名成员,通过this 和 外部类.this来区分。
匿名类使用较少,主要做了解,能看懂即可。
14.2 知识点代码
Lesson14_Outer
//外部类
public class Lesson14_Outer
{
private int i = 1;
public String str = "123";
public Inner i1 = new Inner();
public void Eat()
{
}
public void Speak()
{
}
//在一个类里声明的类 一般称为 内部类
public class Inner
{
public int i = 2;
public void Test()
{
// 外部类中的所有内容(包括私有)都可以直接在内部类中使用
// 内部类和外部类中的同名成员,通过this 和 外部类.this来区分
int i = 3;
System.out.println(i);//3
System.out.println(this.i);//2
System.out.println(Lesson14_Outer.this.i);//1
//System.out.println(str);
i = 10;
str = "韬老狮";
//System.out.println(i);
//System.out.println(str);
}
}
}
Lesson14_Test
public abstract class Lesson14_Test
{
public abstract void Test1();
public abstract void Test2();
}
Lesson14_内部类
public class Lesson14_内部类
{
public static void main(String[] args)
{
//知识点1:Java中的内部类
//注意:Java中的内部类的使用和C#中不同
//1.Java中的内部类在外部使用时必须伴随包裹它的外部类的出现而出现 C#不用
// 声明语法为
// 外部类 outer = new 外部类();
// 外部类.内部类 inner = outer.new 内部类();
Lesson14_Outer outer = new Lesson14_Outer();
Lesson14_Outer.Inner inner = outer.new Inner();
inner.Test();
//2.外部类中的所有内容(包括私有)都可以直接在内部类中使用
//3.内部类和外部类中的同名成员,通过this 和 外部类.this来区分
//知识点2:匿名内部类
//匿名内部类,在声明一个类对象时临时拓展该对象
//但是拓展的内容一般是基于外部类的
//注意:
//1.不能写构造方法
//2.不能定义静态成员
//3.一般基于外部类已有方法实现内容
//4.如果匿名类创建的对象不记录,用完一次后会马上被销毁
//声明匿名类继承重写
Lesson14_Outer outer2 = new Lesson14_Outer()
{
@Override
public void Eat()
{
System.out.println("吃东西");
}
@Override
public void Speak()
{
System.out.println("说话");
}
};
outer2.Eat();//吃东西
outer2.Speak();//说话
//匿名类继承重写抽象类
Lesson14_Test tt = new Lesson14_Test()
{
@Override
public void Test1()
{
System.out.println("111");
}
@Override
public void Test2()
{
System.out.println("222");
}
};
tt.Test1();//111
tt.Test2();//222
//总结
//Java中的内部类和C#中区别较大
//在使用时一定要注意他们的区别之处
//1.Java中的内部类在外部使用时必须伴随包裹它的外部类的出现而出现
//2.外部类中的所有内容(包括私有)都可以直接在内部类中使用
//3.内部类和外部类中的同名成员,通过this 和 外部类.this来区分
//匿名类使用较少,主要做了解,能看懂即可
}
}
14.3 练习题
请说出Java面向对象知识中和C#的不同点,至少说出8点不同
- Java中没有索引器
- Java中没有运算符重载
- Java中没有vo
- Java中的b是super
- Java中继承类用extends关键字
- Java中继承接口用implements关键字
- Java中不存在显示实现接口
- Java中的is是instanceof
- Java中没有as关键字
- Java中用package管理同名类
- Java中的内部类使用和C#不同
- Java中引用包用import,C#中引用命名空间用using
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com