封装、抽象、继承、多态分别可以解决哪些编程问题?

21 阅读2分钟

9.18日 封装、抽象、继承、多态分别可以解决哪些编程问题?

  • 封装.

    封装指的是对属性的具体修饰值,视具体情况赋予 public,private,protect等值,尽量使用private,若需要对属性进行修改,通过 public 方法接口的形式,以此来保证封装性

image.png

  • 抽象.

    抽象是指调用者仅需要知道该方法的具体作用,而不需要了解具体实现,就可以使用该类和该方法。常见的方法也是一种特殊的抽象。第二个是采用类对象继承抽象类和接口的形式,最后再将该类对象结合多态赋值给抽象类或接口,执行调用,可以更加关注抽象接口的调用而屏蔽具体实现

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…