有关于内部类的讲解,见此篇java内部类的创建。
下面分别将讲解局部内部类、匿名内部类、私有内部类。
1. 局部内部类
可以在方法中定义内部类,甚至在语句块中也可以定义内部类,
这种情况通常是某个方法需要创建一个类来辅助完成该方法的功能,而这个类只用在该方法中。
局部内部类需要配合接口来一起使用。
interface Speaker {
void speak();
}
class LocalInnerClass {
Speaker getSpeaker(String str) {
class MySpeaker implements Speaker {
@Override
public void speak() {
System.out.println(str);
}
}
return new MySpeaker();
}
}
public class App {
public static void main(String[] args) {
LocalInnerClass li = new LocalInnerClass();
li.getSpeaker("good").speak();
}
}
局部内部类限定了该类只能在局部作用域内被访问,因此是无法直接返回该类型的对象的,需要向上转型为其实现的接口类型。因此,局部内部类不能使用public和private进行声明。
2. 匿名内部类
Java 中可以实现一个类中包含另外一个类,且不需要提供任何的类名直接实例化。
主要是用于在我们需要的时候创建一个对象来执行特定的任务,可以使代码更加简洁。匿名类是不能有名字的类,它们不能被引用
,只能在创建时用 new 语句来声明它们。
匿名类语法格式:
class outerClass {
// 定义一个匿名类
object = new Type(parameterList) {
// 匿名类代码
};
}
以上的代码创建了一个匿名类对象 object,匿名类是表达式形式定义的,所以末尾以分号
;来结束
。匿名类通常继承一个父类或实现一个接口
。一旦掌握了匿名的内部类,可以让你的代码更加简洁清晰,匿名内部类一定是一个实现某个接口或者继承某个类的类,所以我们必须在使用匿名内部类之前定义一个接口或类。文章来源:https://www.toymoban.com/news/detail-420791.html
/* 1. 匿名类继承一个父类 */
class Polygon {
public void display() {
System.out.println("在 Polygon 类内部");
}
}
class AnonymousClass {
public void createClass() {
// 创建匿名类并继承Polygon类
Polygon p1 = new Polygon() {
@Override
public void display() {
System.out.println("我是匿名类,继承自Polygon类。");
}
};
p1.display();
}
}
/* 2. 匿名类实现一个接口 */
interface Student {
void show();
}
interface Singer {
void sing();
}
class AnonymousClassDemo {
public void createClass() {
// 创建匿名类并实现一个接口
Student su = new Student() {
@Override
public void show() {
System.out.println("我是匿名类,实现了Student接口。");
}
};
su.show();
}
public Singer getSinger() {
return new Singer() {
@Override
public void sing() {
System.out.println("我是匿名类,实现了Singer接口。");
}
};
}
}
class App {
public static void main(String[] args) {
AnonymousClass demo1 = new AnonymousClass();
demo1.createClass();
AnonymousClassDemo demo2 = new AnonymousClassDemo();
demo2.createClass();
demo2.getSinger().sing();
}
}
3. 私有内部类
内部类可以使用 private 或 protected 来修饰,如果你不希望内部类被外部类访问可以使用 private 修饰符。文章来源地址https://www.toymoban.com/news/detail-420791.html
class PrOuterClass {
int num1 = 10;
private class PrInnerClass {
int num2= 20;
}
}
// 企图在外部创建私有类,错误
PrOuterClass pOuter = new PrOuterClass();
PrOuterClass.PrInnerClass pInner = pOuter.new PrInnerClass(); // error
到了这里,关于局部内部类、匿名内部类、私有内部类的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!