• Java面向对象之继承


    内容:

    1、面向对象

    2、继承的概念与使用

    3、继承的特点和注意事项

    4、Java为什么只支持单继承

    5、向上抽取原则

    6、方法重写

    1、面向对象

    (1)什么是面向对象

    面向对象是一种编程思想、面向对象是相对于面向过程的

    (2)面向过程与面向对象的区别

    • 面向过程:遇到一个问题,亲力亲为地一步一步解决它(小兵思想),典型的代表语言:c语言
    • 面向对象:遇到一个问题,找具有解决这个问题的对象,调用该对象的方法(老板思想),典型的代表语言:java语言

    2、继承的概念与使用

    (1)继承

    Java中的继承是两个类之间的关系

    一个类(子类/派生类/sub)可以继承另外一个类(父类/基类/超类/super),这个过程我们称为Java中的继承 

    (2)继承使用

    继承使用如下:

    1 public class 父类{}
    2 public class 子类 extends 父类{}

    子类在继承父类的时候,会自动拥有父类的成员(private除外)

    继承是面向对象的核心特性,是面向对象的学习重点,同时继承是代码复用的重要方式,是类与类之间的一种关系

    子类访问父类成员变量:

     1 class Fu
     2 {
     3     //Fu中的成员变量。
     4     int num = 5;
     5 }
     6 class Zi extends Fu
     7 {
     8     //Zi中的成员变量
     9     int num2 = 6;
    10     //Zi中的成员方法
    11     public void show()
    12     {
    13         // 访问父类中的num
    14         System.out.println("Fu num="+num);
    15         // 访问子类中的num2
    16         System.out.println("Zi num2="+num2);
    17     }
    18 }
    19 class Demo 
    20 {
    21     public static void main(String[] args) 
    22     {
    23         Zi z = new Zi(); // 创建子类对象
    24      // System.out.println(z.num);
    25         // z.show(); //调用子类中的show方法
    26     }
    27 }

    代码说明:Fu类中的成员变量是非私有的,子类中可以直接访问,若Fu类中的成员变量私有了,子类是不能直接访问的

    另外若父类和子类中有同名成员变量时,使用子类的对象访问该成员变量时,优先访问子类自己的

    子类中访问父类成员方法:

    当在程序中通过对象调用方法时,会先在子类中查找有没有对应的方法,若子类中存在就会执行子类中的方法,若子类中不存在就会执行父类中相应的方法

     1 class Fu{
     2     public void show(){
     3         System.out.println("Fu类中的show方法执行");
     4     }
     5 }
     6 class Zi extends Fu{
     7     public void show2(){
     8         System.out.println("Zi类中的show2方法执行");
     9     }
    10 }
    11 public  class Test{
    12     public static void main(String[] args) {
    13         Zi z = new Zi();
    14         z.show(); // 子类中没有show方法,但是可以找到父类方法去执行
    15         z.show2();
    16     }
    17 }

    (3)继承的作用

    • 子类自动拥有父类的可继承(非private修饰的)成员变量和方法
    • 提高代码的复用性 

    (4)this和super

    • this:区分本类中的成员变量和局部变量同名的情况
    • super:区分子类中的成员变量和父类中的成员变量

    (5)继承内存图

    3、继承的特点和注意事项

    (1)继承的特点:

    • Java只支持单继承:就一个子类  只能有一个父类(一个孩子只能有一个亲爹)
    • Java支持多层继承:一个子类有它自己的父类,这个父类还可以有它自己的父类
    • 父类定义了继承树中共性内容,子类定义了该类个性内容,子类拥有父类所有可继承的属性和方法(非private)
    • 说明:在以后的开发过程中我们学习了多态后,要结合多态,能使用父类时尽量使用父类,提高程序扩展性

    (2)继承注意事项:

    • 继承必须合理性 =》人是人他妈生的 妖是妖他妈生的  从类与类之间的设计关系来看,子类必须属于父类的一种时 is a,才会继承
    • 父类中成员是共性的内容 =》所有子类都有的才能写到父类  父类抽取出了共性的内容,子类可以在父类基础上扩展新的属性与行为
    • 子类自动拥有父类的成员并且可以直接使用非私有的父类成员

    4、Java为什么只支持单继承

    5、向上抽取原则

    Java中的设计思想:

    • 算法
    • 设计模式
    • 设计原则

    Java的一个设计原则 - 向上抽取原则  =》把子类中共有的成员向上抽取出一个父类,把这些共有的成员写在父类中

    下面是关于向上抽取原则的一道面试题:

    题目描述:

    请你设计四个类,花、树、猫、狗

    解决如下:

    6、方法重写

    (1)什么是方法重写 

    子类中出现与父类一模一样的方法时,会出现覆盖操作,也称为override重写、复写或者覆盖

     1 class Fu
     2 {
     3     public void show()
     4     {
     5         System.out.println("Fu show");
     6     }
     7 }
     8 
     9 class Zi extends Fu
    10 {
    11     // 子类重写了父类的show方法
    12     public void show()
    13     {
    14         System.out.println("Zi show");
    15     }
    16 }

    (2)方法重写的应用

    当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法,

    这样,即沿袭了父类的功能,又定义了子类特有的内容

    举例:比如手机,当描述一个手机时,它具有发短信,打电话,显示来电号码功能,后期由于手机需要在来电显示功能

    中增加显示姓名和头像,这时可以重新定义一个类描述智能手机,并继承原有描述手机的类。并在新定义的类中覆盖

    来电显示功能,在其中增加显示姓名和头像功能。

    代码:

     1 public class Test {
     2     public static void main(String[] args) {
     3         new NewPhone().showNum();
     4     }
     5 }
     6 
     7 //手机类
     8 class Phone{
     9     public void sendMessage(){
    10         System.out.println("发短信");
    11     }
    12     public void call(){
    13         System.out.println("打电话");
    14     }
    15     public void showNum(){
    16         System.out.println("来电显示号码");
    17     }
    18 }
    19 
    20 //智能手机类
    21 class NewPhone extends Phone{
    22     
    23     //覆盖父类的来电显示号码功能,并增加自己的显示姓名和图片功能
    24     public void showNum(){
    25         //调用父类已经存在的功能使用super
    26         super.showNum();
    27         //增加自己特有显示姓名和图片功能
    28         System.out.println("显示来电姓名");
    29         System.out.println("显示头像");
    30     }
    31 }

    (3)方法重写的注意实现

    • 子类方法覆盖/重写/覆写(override)父类方法,必须要保证权限大于等于父类权限
    • 如果父类的方法是private的修饰的,那么在子类中没法重写(其他修饰符都可以重写)
    • 写法上稍微注意:必须一模一样:方法的返回值类型 方法名 参数列表都要一样

    总结:当一个类是另一个类中的一种时,可以通过继承,来继承属性与功能。如果父类具备的功能内容需要子类特殊定义时,进行方法重写

  • 相关阅读:
    protobuf简单测试应用
    golang代码片段(摘抄)
    ibatis中 $ 于 # 的 区别?
    eclipse debug 执行到断点处并没有停下,断点无效问题
    使用selenium遇到java.lang.NoSuchMethodError: org.apache.xpath.XPathContext,排查
    设置MAVEN_OPTS的推荐方法
    UI型Bug定义的处理方法
    select count(*)和select count(1)的区别
    mac下搭建java开发环境:eclipse+tomcat+maven
    eclipse中svn提交报错的解决
  • 原文地址:https://www.cnblogs.com/wyb666/p/10287934.html
Copyright © 2020-2023  润新知