抽象类有一个关键字:abstract,怎么去定义一个抽象类?
例:public abstract class Pet{};
加上abstract之后这个类就会变成抽象类。
抽象类里面可以有抽象的方法 也可以有实例的方法,但是如果方法是抽象的方法那么类就必须是抽象类。抽象的方法的写法:
例:public abstract void eat();
如果,抽象类中写了抽象的方法那么就必须在子类中进行实现,不然会报错。如果不实现那么子类必须也是抽象类。
普通的类里面是不可以含有抽象的方法的,抽象方法只可以写在抽象类中。抽象类不可以实例化,普通类可以。
抽象方法没有方法体,普通方法含有方法体。
此时父类类型变量能调用的方法是:
此时通过父类引用变量调用的方法是子类覆盖或继承父类的方法,不是父类的方法。
此时通过父类引用变量无法调用子类特有的方法。
父类类型变量,如果想调用子类中特有的方法,需要将父类类型的变量向下转型。在向下转型的时候注意子类的类型(使用instanceOf关键字判断)。
那么我们在说一下我理解的多态:
简单来说多态就是基于继承的基础上的一种方法。
举个例子:
比如你家有亲属结婚了,让你们家派个人来参加婚礼,邀请函写的是让你爸来,但是实际上你去了,或者你妹妹去了,这都是可以的,因为你们代表的是你爸,但是在你们去之前他们也不知道谁会去,只知道是你们家的人。可能是你爸爸,可能是你们家的其他人代表你爸参加。这就是多态
比如说我们创建一个父类Pet,一个子类Dog;
我们来实现向上和向下转型的操作:
Pet pet=new Dog()
;这就是向上转型。
Dog dog=(Dog)Pet();
这个就是向下转型。
我们创建一个方法:
public void eat(Pet pet){};
这个实力方法中的参数我们用父类作为参数 就是多态的特点。
除了这个特点多态还有一个重要的特点就是父类作为返回值:
public Pet eat(String a){
Pet pet=null;
if(g.equals(“123”)){
pet=new Dog;
return pet;
}
有一点需要注意的就是这里面返回的Pet不是一个数值,是一个对象。
以上就是我对多态和抽象的一点理解。