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