java学习笔记
java匿名内部类是否有父类
本 文 目 录
匿名内部类是可以有父类的,它可以继承一个父类或实现一个接口。
一. 匿名内部类的定义与特点
- 匿名内部类是一种没有显式命名的类,它直接定义在另一个类或方法的内部。
- 它通常是用来简化代码,特别是一次性使用的类。
class Animals {
public void eat() {
System.out.println("动物都要吃东西");
}
}
public class Demo {
public static void main(String[] args) {
// 10~14行用匿名内部类重写一种方法
new Animals() {
public void eat() {
System.out.println("我是匿名内部类");
}
}.eat();
// 从17~25行用一个普通类继承来重写一种方法
class Dog extends Animals {
public void eat() {
System.out.println("狗要吃肉");
}
}
Dog d = new Dog();
d.eat();
}
}
输出的结果为:
我是匿名内部类
狗要吃肉
这是因为在代码中,我们首先创建了一个匿名内部类并调用了它的eat方法,这个方法打印出“我是匿名内部类”。接着,我们创建了一个Dog对象并调用了它的eat方法,这个方法打印出“狗要吃肉”。
二. 匿名内部类与父类的关系
- 1、匿名内部类与普通的类一样,它可以继承一个父类。当创建一个匿名内部类时,它是隐式地继承了一个父类。
- 2、如果匿名内部类实现了某个接口,那么它同时也继承了该接口的默认方法(如果有的话)。
三. 匿名内部类的代码
案例1: 匿名内部类继承一个父类:
public class OuterClass {
public class BaseClass {
public void sayHello() {
System.out.println("Hello from BaseClass!");
}
}
public void test() {
// 匿名内部类继承BaseClass
BaseClass anonymous = new BaseClass() {
@Override
public void sayHello() {
System.out.println("Hello from Anonymous Class!");
}
};
anonymous.sayHello(); // 输出: Hello from Anonymous Class!
}
public static void main(String[] args) {
OuterClass outer = new OuterClass();
outer.test();
}
}
代码解释:Java代码定义了一个外部类`OuterClass`,一个内部类`BaseClass`,以及一个匿名内部类,它继承自`BaseClass`并重写了`sayHello`方法。
当你运行这段代码,它将会执行`main`方法,`main`方法又调用了`test`方法。在`test`方法中,创建了一个继承自`BaseClass`的匿名内部类的实例,并调用了这个实例的`sayHello`方法。
所以,这段代码的输出结果为:
Hello from Anonymous Class!
这个结果是因为匿名内部类重写了BaseClass
的sayHello
方法,所以当你调用anonymous.sayHello()
时,它会输出"Hello from Anonymous Class!"而不是"Hello from BaseClass!"。
案例2: 匿名内部类实现接口:
public class OuterClass {
public interface Greeter {
void sayHello();
}
public void test() {
// 匿名内部类实现Greeter接口
Greeter anonymous = new Greeter() {
@Override
public void sayHello() {
System.out.println("Hello from Anonymous Class implementing Greeter!");
}
};
anonymous.sayHello(); // 输出: Hello from Anonymous Class implementing Greeter!
}
public static void main(String[] args) {
OuterClass outer = new OuterClass();
outer.test();
}
}
该代码的输出结果为:
Hello from Anonymous Class implementing Greeter!
这是因为匿名内部类实现了Greeter
接口,并重写了sayHello
方法,所以调用anonymous.sayHello()
时输出的是"Hello from Anonymous Class implementing Greeter!"。
通过这两个案例,我们可以看到匿名内部类是可以有父类的,它可以继承一个父类或实现一个接口。
- 上一篇
Java中需要try-catch的异常类型有哪些?
在Java中,异常被分为两大类:检查型异常(也称为编译时异常)和非检查型异常(运行时异常)。检查型异常是那些在编译时期就会被检测到的异常,这类异常必须要进行处理,否则程序无法通过编译。处理检查型异常通常使用try-catch语句块。## 一、常见的需要try-catch的异常1. **IOException(输入输出异常)**这是在进行输入输出操作,如文件读写、网络数据传输等时可能出现的异常。Ja
- 下一篇
java匿名内部类主要原则
Java匿名内部类的主要原则是**隐式性和简洁性**。它们允许我们在不使用显式类名的情况下创建类,从而使代码更简洁、更清晰。