1、什么是抽象类?2、什么是匿名 与 为什么要使用匿名?3、抽象类的匿名子类的四种情况4、Code
1、什么是抽象类?抽象类是被abstract修饰的类,抽象类不能被实例化。抽象类是用来被继承的。
抽象的意义:如果没有多态,抽象就没有意义,因为抽象类无法实例化,但可以通过父类引用指向子类对象。
为了省事,为了方便,有时候我们只需要使用一次实例化的类,因此省去给实例化的类搞个名字。比如有个类叫做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);;//1、非匿名类的非匿名对象(类名:Men 对象名:men) abstractTest.method(new Women());//2、非匿名类的匿名对象(类名:Women 对象名:无) Person person=new Person() { //3、匿名子类的非匿名对象(子类名:无 对象名:person) //相当于用抽象类指向子类对象,但此时不知道哪个子类,因此需要重写 //所以借助子类重写方法来实现方法的调用。 @Override public void run() { System.out.println("跑步"); } @Override public void eat() { System.out.println("吃饭"); } }; method(person); abstractTest.method(new Person() { //4、匿名子类的匿名对象(子类名:无 对象名:无) //最简便的写法,连子类名都没有了 @Override public void run() { System.out.println("跑步"); } @Override public void eat() { System.out.println("吃饭"); } }); } public static void method(Person p) { p.eat(); p.run(); } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)