package test;
public class Test {
public static void main(String[] args) {
worker w=new worker();
method1(w);//对象是有名的,是w,类是有名的,是worker。所以为非匿名类非匿名对象
method1(new worker());//非匿名的类匿名的对象
Person p=new Person() {
@Override//这里也说明了创建的类是Person的子类,注意重写相关的方法
public void eat() {
System.out.println("吃东西");
}
@Override
public void breath() {
System.out.println("呼吸");
}
};//是new了一个对象,但不是new了一个抽象类的对象,创建了一个匿名(这个类没有名)子类(是Person的子类)对象,对象名为p
method1(p);//会调用对象重写的方法,还涉及到了多态的使用
//造匿名子类的匿名对象
method1(new Person() {
@Override//这里也说明了创建的类是Person的子类,注意重写相关的方法
public void eat() {
System.out.println("吃好吃的东西");
}
@Override
public void breath() {
System.out.println("呼吸新鲜空气");
}
});
}
public static void method1(Person p) {
p.eat();
p.walk();
}
}
abstract class Person{//抽象类也可以继承,比如Person是可以继承别的类的
String name;
int age;
public Person() {
}
public Person(String name,int age) {
this.name=name;
this.age=age;
}
public abstract void eat();
public abstract void breath();
public void walk() {
System.out.println("人走路");
}
}
class worker extends Person{
@Override
public void eat() {
// TODO Auto-generated method stub
}
@Override
public void breath() {
// TODO Auto-generated method stub
}
}
如果不想用匿名子类的,可以显示的给抽象类提供子类