9.18日 封装、抽象、继承、多态分别可以解决哪些编程问题?
-
封装.
封装指的是对属性的具体修饰值,视具体情况赋予 public,private,protect等值,尽量使用private,若需要对属性进行修改,通过 public 方法接口的形式,以此来保证封装性
-
抽象.
抽象是指调用者仅需要知道该方法的具体作用,而不需要了解具体实现,就可以使用该类和该方法。常见的方法也是一种特殊的抽象。第二个是采用类对象继承抽象类和接口的形式,最后再将该类对象结合多态赋值给抽象类或接口,执行调用,可以更加关注抽象接口的调用而屏蔽具体实现
interface Person{
void printHello();
}
class XiaoMing implements Person{
public void printHello(){
System.out.println("hello world");
}
}
public class Program1 {
public static void main(String[] args) {
Person p = new XiaoMing();
p.printHello();
}
}
-
继承.
对于有 is-a 关系的类,比如猫,狗,都属于动物,那么可以将公共属性方法提升到 Animal 类中。在子类中也可以重写父类的方法,比如 eat 方法,不同的动物吃的东西不同,那么就可以写自己特有的 eat 方法。“多用组合少用继承”的准则
-
多态.
父类或父接口持有“继承并实现”了他们方法的各种子类对象,在调用方法的时候调用的是对应子类实现的方法,可以实现多态
interface Person{
default void printHello(){
System.out.println("Person hello world");
}
}
class XiaoMing implements Person{
public void printHello(){
System.out.println("XiaoMing hello world");
}
}
public class Program1 {
public static void main(String[] args) {
Person p = new XiaoMing();
p.printHello();
}
}
为什么有些编程语言采用多继承,有些采用单继承?
答:java语言中,不支持类的多继承,为了避免产生棱形问题(两个父类的同名方法实现在子类调用看来不知道调用的是哪一个),但是支持接口的多实现,因为在子类中都是需要重写。但是在java8之后,运行在接口中写方法的默认实现,但是java会有判断,如果子接口有重名的方法,那么会要求子类重写该方法。 参考链接:www.51cto.com/article/647…