day11-匿名内部类的定义和使用(重点)
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
package com.inmind.noname_innerclass08;
|
||||
|
||||
public abstract class AbstractClass {
|
||||
public abstract void method1();
|
||||
}
|
||||
10
day11/src/com/inmind/noname_innerclass08/Animal.java
Normal file
10
day11/src/com/inmind/noname_innerclass08/Animal.java
Normal file
@@ -0,0 +1,10 @@
|
||||
package com.inmind.noname_innerclass08;
|
||||
|
||||
public class Animal {
|
||||
int age;
|
||||
String name;
|
||||
|
||||
public void eat(){
|
||||
System.out.println("动物要吃吃吃");
|
||||
}
|
||||
}
|
||||
94
day11/src/com/inmind/noname_innerclass08/Demo06.java
Normal file
94
day11/src/com/inmind/noname_innerclass08/Demo06.java
Normal file
@@ -0,0 +1,94 @@
|
||||
package com.inmind.noname_innerclass08;
|
||||
/*
|
||||
匿名内部类:定义在方法中的一个没有名字的类
|
||||
|
||||
之前我们使用的一个类的子类,或者接口的实现类时,必定要先定义.java文件,再创建出对象,调用方法,但是
|
||||
如果该子类或者实现类只用一次,那么.java文件就有点多余了,这时就可以使用匿名内部类
|
||||
|
||||
匿名内部类定义:
|
||||
{
|
||||
|
||||
@Override
|
||||
public void method() {
|
||||
System.out.println("匿名内部类的method方法被调用了");
|
||||
}
|
||||
};
|
||||
|
||||
必须跟new 接口名(匿名内部类定义) ,new 抽象类名(匿名内部类定义),new 普通类名(匿名内部类定义)后面。
|
||||
*/
|
||||
public class Demo06 {
|
||||
|
||||
public static void main(String[] args) {
|
||||
//普通接口的使用
|
||||
MyInterfaceImpl impl = new MyInterfaceImpl();
|
||||
impl.method();
|
||||
//多态的使用:父类引用指向子类对象
|
||||
MyInterface impl1 = new MyInterfaceImpl();
|
||||
impl1.method();
|
||||
|
||||
//能不能将MyInterfaceImpl.java这个类的定义,直接省略掉,那就使用匿名内部类
|
||||
MyInterface impl2 = new MyInterface(){
|
||||
|
||||
@Override
|
||||
public void method() {
|
||||
System.out.println("匿名内部类中的method方法被调用了");
|
||||
}
|
||||
};
|
||||
impl2.method();
|
||||
//---------------------------------------------------
|
||||
//抽象父类的匿名内部类
|
||||
// 使用AbstractClass,但是不定义出它的子类的java文件,使用匿名内部类
|
||||
AbstractClass ac = new AbstractClass(){
|
||||
@Override
|
||||
public void method1() {
|
||||
System.out.println("匿名内部类(子类)实现了抽象父类的method1方法");
|
||||
}
|
||||
};
|
||||
ac.method1();
|
||||
//-----------------------------------------------------
|
||||
//普通类的匿名内部类
|
||||
Animal dog = new Animal(){
|
||||
@Override
|
||||
public void eat() {
|
||||
System.out.println("狗吃骨头");
|
||||
}
|
||||
};
|
||||
dog.eat();
|
||||
|
||||
|
||||
//匿名内部类和匿名对象
|
||||
//new Scanner(System.in).nextInt();//匿名对象
|
||||
|
||||
/*
|
||||
new MyInterface(){
|
||||
@Override
|
||||
public void method() {
|
||||
System.out.println("匿名内部类中的method方法被调用了");
|
||||
}
|
||||
} 是匿名对象
|
||||
|
||||
{
|
||||
@Override
|
||||
public void method() {
|
||||
System.out.println("匿名内部类中的method方法被调用了");
|
||||
}
|
||||
}是匿名内部类
|
||||
|
||||
|
||||
*/
|
||||
new MyInterface(){
|
||||
@Override
|
||||
public void method() {
|
||||
System.out.println("匿名内部类中的method方法被调用了");
|
||||
}
|
||||
}.method();
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void method(){
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package com.inmind.noname_innerclass08;
|
||||
|
||||
public interface MyInterface {
|
||||
void method();
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package com.inmind.noname_innerclass08;
|
||||
|
||||
public class MyInterfaceImpl implements MyInterface{
|
||||
@Override
|
||||
public void method() {
|
||||
System.out.println("MyInterfaceImpl类中的method方法被调用了");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user