1、什么是抽象类?
抽象类是被abstract修饰的类,抽象类不能被实例化。抽象类是用来被继承的。 抽象的意义:如果没有多态,抽象就没有意义,因为抽象类无法实例化,但可以通过父类引用指向子类对象。
2、什么是匿名 与 为什么要使用匿名?
为了省事,为了方便,有时候我们只需要使用一次实例化的类,因此省去给实例化的类搞个名字。比如有个类叫做Person,该类有个方法是show(),我们可以直接通过 new Person().show() 来调用该方法,而省去给该实例化的类赋一个对象名。
3、抽象类的匿名子类的四种情况
1.非匿名类的匿名对象 有类名,无实例化的对象名
2.非匿名类的非匿名对象 有类名,有实例化的对象名
3.匿名子类的非匿名对象 无子类名,有实例化的子类对象名
4.匿名子类的匿名对象 无子类,无实例化的子类对象名
4、Code
abstract class Person{
public abstract void run();
public abstract void eat();
}
class Men extends Person{
@Override
public void run() {
System.out.println("男人:跑步");
}
@Override
public void eat() {
System.out.println("男人:吃饭");
}
}
class Women extends Person{
@Override
public void run() {
System.out.println("女人:跑步");
}
@Override
public void eat() {
System.out.println("女人:吃饭");
}
}
public class AbstractTest {
public static void main(String[] args) {
AbstractTest abstractTest=new AbstractTest();
Men men=new Men();
abstractTest.method(men);;
abstractTest.method(new Women());
Person person=new Person() {
@Override
public void run() {
System.out.println("跑步");
}
@Override
public void eat() {
System.out.println("吃饭");
}
};
method(person);
abstractTest.method(new Person() {
@Override
public void run() {
System.out.println("跑步");
}
@Override
public void eat() {
System.out.println("吃饭");
}
});
}
public static void method(Person p) {
p.eat();
p.run();
}
}
|