匿名内部类只能用于接口的实现吗??
匿名内部类可以用来快速创建接口的实现类、抽象类的子类或普通类的子类对象,适用于只需要使用一次的场景

这里的class AImpl和interface A 默认的修饰符是什么呀?
默认修饰符 就是叫默认修饰符 访问修饰符分4个 public 公开 protected 受保护的 无修饰符 默认的 private 私有的

普通方法调用必须通过对象名调用,而t就是上面这个对象的对象名。直接输入方法名这种是被static修饰的方法在本类中调用才可以使用。
老师这里的逻辑不太懂

因为我们要在test1方法中调用线程的run方法,所以必须要传入一个对象,否则无法调用,不可以的,tac是对象,并不是方法,我们要调用方法。
这是这么一回事呢

public void show(){
class Inner3{
public void fun(){
System.out.println("hello");
}
}
new Inner3().fun();
}正确写法如上。
老师我这里报错了

一个Java文件里面只能有一个公开的public类哦,而且还要保证公开类的类名和文件名一致的。
那应该怎么改呢?
那应该怎么改呢?
只留一个public,其他的都不写public使用默认的访问修饰符,class a{}这样的
我把public删了但是结果还是一样

老师没事了,我知道哪错了
文件名要和公开类的类名一致哦
//通过 new 外部类名。内部类名() 来创建内部类对象 Outer2.Inner2 inner = new Outer2.Inner2(); inner.test();
老师这两行代码能详细讲解一下思路不
有点没理清楚。。
这个是Inner2这个类,是创建在Outer2这个类中的一个内部类。
正常new对象的话直接new Outer这个类就可以了,但是要是new 内部类的话,就要先new他的外部类对象,然后在这个对象后面加上.Inner2()才能够得到这个类。
不能直接new Inner2这个类,因为这个类是在另一个类的内部。
老师,我的代码应该没写错,为什么运行匿名内部类的时候乱码了?
把匿名内部类中的重写方法中输出语句的中文,删掉重写就可以了。
试过了,还是一样的结果,我把匿名内部类又重写了一遍,也没有用。
修改idea的编码,改为utf-8,之后重写你的中文部分代码。

一直没太理解方法为什么可以这么写 这个test1(A a)中的A a指的是什么参数呢?
下面不是有一个接口A吗,这个就是test1方法里需要一个A接口类型的,形参是a。你把接口看成是一个特殊的类。
老师,这2个写法都可以嘛?我看视频是用的第一个写法,我用第二个写法也没报错也能运行
class Outer{
private int age = 10;
public void show(){
System.out.println(age);
}
public class Inner1 {
private int age = 20;
public void show(){
System.out.println(age);
System.out.println(Outer.this.age);
}
}
public static void main(String[] args) {
/* Outer outer = new Outer();
Inner1 i = outer.new Inner1();
outer.show();
i.show();*/
Outer.Inner1 i = new Outer().new Inner1();
i.show();
Inner1 inner1 =new Outer().new Inner1();
inner1.show();
}
}
没有区别的,一样的~

老师,划线部分不明白,为啥可以这样写,能具体说一说吗
红框相当于是绿框的简写,这里就是把AA对象实例化出来,调用它里面的test方法。

这种方法就是不实例化对象了,定义了run方法以后直接调用了,一次性的。

package com.bjsxt.test3;
public class TestAnonymousInnerClass {
public void test(A1 a){
a.run();
}
public static void main(String[] args){
TestAnonymousInnerClass t=new TestAnonymousInnerClass();
t.test(new AA());
t.test(new A1() {
@Override
public void run() {
System.out.println("TestAnonymousInnerClass.run");
}
});
}
}
class AA implements A1{
@Override
public void run() {
System.out.println("AA.run");
}
}
interface A1{
void run();
}老师,为啥接口A成为了匿名类。实现类AA不是
你返回去看看前面的视频,接口就是这么定义的,和类没有关系,只是类实现这个接口。
而接口需要类来实现,得知道哪个类实现了这个接口,所以AA并不能是匿名的。
A01 {
(){}(String str){
System..println(str)}
(){
System..println()}
}
Test03 {
(A01 a){
a.runA01()}
(String[] args) {
Test03 t = Test03()t.runT01(A01())}
}1. 请问下面这一句算不算匿名内部类的使用?为什么?
t.runT01(new A01());
2. 匿名内部类是否只能和接口或者抽象父类联合使用?是否有匿名内部类继承非抽象父类的案例?
代码乱码了
// 接口A
interface A{
void run();
}
// 有名字的类,可以反复使用
class AA implements A{
@Override
public void run() {
System.out.println("AA.run");
}
}
public class TestAnonymousInnerClass {
public void test(A a){
a.run();
}
public static void main(String[] args) {
TestAnonymousInnerClass tai = new TestAnonymousInnerClass();
// 调用test方法 通过new AA() 创建实现类AA的对象并传入 这里调用的重写后的run()方法
tai.test(new AA());
}1、老师,这里的tai,test(new AA())算是匿名内部类吗?
2、new TestAnonymousInnerClass(); 这样直接new,前面没起名字的就是匿名么?
1、老师,这里的tai,test(new AA())算是匿名内部类吗?
不算
new TestAnonymousInnerClass(); 这样直接new,前面没起名字的就是匿名么?
这个是匿名函数,这个对象只实例化一次就已经被回收了。
老师匿名内部类的时候为什么还可以new接口啊
这实质上是使用匿名接口来实现匿名内部类的, 匿名接口这样写是会自动生成一个 实现了该接口的匿名类
哦哦
好