Java匿名内部类的学习
新建一个抽象类或者接口,抽象类中只要有一个抽象方法就是抽象类,接口的定义是:里面的方法全部都是抽象方法,接口和抽象类不能直接实例化,需要子类来实现
/* 匿名内部类:
1。匿名内部类其实就是内部类的简单样式
2.定义匿名内部类的前提,内部类必须是继承一个类或者实现接口
3.格式:new 父类或者接口(){定义子类的内容(如函数等)}
4.其实匿名内部类就是一个匿名子类对象。而且这个对象有点胖。
5.匿名内部类钟定义的方法最好不要超过3个。
多了建匿名内部类的代码会太多,很冗余。
*/
public abstract class Animal { public String name; public String sex; public abstract void run(); public abstract void eat(String name); /** * 语法规则: abstract 不能够用于 private修饰的方法,不能够用于 final修饰的方法 abstract * 不能够用与修饰static方法 abstract 不能够修饰成员属性 */ // 这不是抽象方法 public final void eat() { } }
然后新建一个子类
public class AnimalDemo { /** * 匿名内部类的使用 * * @param args */ public static void main(String[] args) {
//匿名内部类的使用,匿名内部类是实现了父类的抽象方法,或者实现接口的全部抽象方法 Animal a = new Animal() { @Override public void run() { System.out.println("使用内部类的跑"); } @Override public void eat(String name) { System.out.println("使用内部类的跑" + name); } }; a.eat(new Date().toString()); // 下面是不用匿名内部类的使用,等效于上面的 /* * Animal a2=new Dog(); a2.eat("dog"); */ Animal a3 = new Cat(); a3.eat("鱼"); } } // 下面是不用匿名内部类的使用,等效于上面的 class Cat extends Animal { @Override public void run() { System.out.println("没有使用内部类的跑"); } @Override public void eat(String name) { System.out.println("没有使用内部类 ,猫吃" + name); } }