继承,抽象类,接口
Java面向对象的三大特性:封装性、继承性、多态性
说一说继承性
我学到继承性之后虽然都了解继承性当中的继承、抽纸类、接口的具体使用方法及特点,但是对概念还是不够深刻,不理解他们之间的联系意义。然后查了好多资料,在这写下我的感悟
继承
为什么有这个继承呢,主要优点在于:
- 功能复用
- 便于扩展新功能
- 结构清晰、简化认识
- 易维护性
所以关于继承最核心的还是在于:父类中存放的是子类的共性,这里的共性指的是共同属性和共同方法。父类抽取共性,子类继承共性,子类可以拥有个性。
举个例子
public class Animal{
private String name;
public void eat(){
System.out.println("吃饭");
}
public void sleep(){
System.out.println("睡觉");
}
//getter,setter
}
public class Cat extends Animal{
public void eat(){
System.out.println(getName()+"吃猫食");
}
public void play(){
System.out.println("躲猫猫");
}
super.sleep();
}
public class Dog extends Animal{
public void eat(){
System.out.println(getName()+"吃狗食");
}
public void run(){
System.out.println("遛狗");
}
super.sleep();
}
猫与狗的共性就是他们都是动物,并且拥有名字,具有吃的能力,睡觉。所以猫与狗共同继承动物这个父类,而动物父类提取猫与狗之间的共性就是【有名字】,【能够吃饭】,【睡觉】。而同时子类可以拥有自己的个性,可以覆盖重写自己的吃饭的方法,也可以扩展其特有方法。
所以拥有继承的好处就显而易见了。
抽象类
在了解完继承后,又开始了抽象类,学完抽象类之后我又懵了,就不停再想为什么要有这个抽象类的存在。
而在上面继承里说:父类抽取共性,子类继承共性,子类可以拥有个性
但是!共性中也是会存在个性的!
啥意思呢-->在代码中,虽然猫与狗都能够吃饭,但是吃的东西却不一样,所以这才覆盖重写了eat()方法,从而导致父类中的eat()方法中的内容则显得多余。而假设多个子类拥有众多的共性,但共性又不是都一致,所有在子类中已经覆盖重写父类方法的同时,还有必要在父类方法里添加方法体吗。
所有这里引入了抽象类这个概念,将父类定义为抽象类,这样父类中的方法不必添加方法体,因为共性就是一个模糊的概念,我们不可能在这样的模糊的前提下去定义具体事务而被所有的子类所继承,继承的终究不符合子类,是一定被覆盖重写。
public abstract class Animal{ //抽象类不一定包含抽象方法,有抽象方法那么类一定是抽象类。
private String name;
public abstract void eat();//抽象方法
public void sleep(){
System.out.println("睡觉");
}
//getter,setter
}
接口
接口与抽象类的概念大致相似,只是接口是对外提供的一组规则、标准。而类与接口之间是实现关系。实现类就是实现接口的功能。
接口使用步骤:
1.接口不能直接使用,必须有一个"实现类"来"实现"该接口
接口
public interface 接口名称{
//抽象方法
//默认方法
//静态方法
//私有方法
}
实现类
public class 实现类名称 implements 接口名称{
//....
}
2.接口的实现类必须覆盖重写(实现)接口中所有的抽象方法。
3.创建实现类的对象,进行使用
注意事项:如果实现类并没有覆盖重写接口中所有的抽象方法,那么这个实现类自己就必须是抽象类
原文地址:https://www.cnblogs.com/snowind/p/12608055.html