Java面向对象三大特性之继承

  Java是一门典型的面向对象的语言,在Java基础阶段中,如果是新手或者从C过来的程序员可能会对面向对象的三大思想不是很理解,封装还好一些,毕竟面向过程的语言里面多少都有所体现。但是继承和多态就比较难理解了。下面是我个人学习继承中的一点收获总结。

 

继承:

  如果一个类别A“继承自”另一个类别B,就把这个A称为“B的子类别”,而把B称为“A的父类别”也可以称“B是A的超类”。继承可以使得子类别具有父类别的各种属性和方法,而不需要再次编写相同的代码。在令子类别继承父类别的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类别的原有属性和方法,使其获得与父类别不同的功能。

  

  我个人理解,继承就是为了让编写代码更简单,通过继承得到父类的属性和方法,这样就不用再写一遍了。子类作为父类的拓展,可以在实现父类功能的同时添加自己的功能。所以继承需要符合的关系是:is-a,父类更通用,子类更具体。

  举个爸爸和儿子的例子:

  爸爸叫老王,儿子叫小王。老王是超人会吃饭,睡觉,飞。他的儿子小王也是超人,也应该会吃饭,睡觉,飞,因为他爹会所以他继承了他爹的功能,这时候,小王的功能不需要自己写,只要继承一下就能得到了。

  

  在Java中,继承的关键字是 “ extends ”,格式为:修饰符 + 类名 + extends +要继承的父类 + {.........}  

  继承的原则:

      1.Java只支持单继承,即每个类只能直接继承一个父类

      (但是可以通过父类继承父类的父类的属性和方法)

      2.Java中所有的类都继承自Object类(所以所有类都能使用object类的方法)

      3.子类不能继承父类私有的(即 private 修饰的)属性和方法

      (除了私有的全可以继承——这就牵扯到一个问题:main函数能不能被继承——根据定义,答案是:能的!!!    但是因为main函数是用static修饰的,所以不能重写)

      这里举个例子,直接上代码——

        

public class Main {

 

  public static void main(String[] args) {

    Son son = new Son();
    System.out.println(son.age);
    son.sleep();
    son.eat();

 

  }
}
class Father{
  int age = 40;
  private void eat(){
    System.out.println("爸爸吃饭");
  }
  public void sleep(){
    System.out.println("爸爸睡觉");
  }  
}

 

class Son extends Father{

 

  public void sleep(){
    System.out.println("儿子睡觉");
  }
}

 

输出结果:40  儿子睡觉  调用eat()则会报错,因为private类型修饰的无法继承。

 

      4.继承会提高代码的耦合性(编写代码的要求:高内聚,低耦合(这个以后再说。。。))

 

 

   

posted @ 2019-11-09 22:00  Langsin-Byte  阅读(229)  评论(0)    收藏  举报