zoukankan      html  css  js  c++  java
  • java复习(3)继承

    一、继承为题的提出

    ----------------------------------------------------

      我们知道面向对象的三大特性是:封装、继承和多态,可以知道继承在java应用中有多么的重要了。

    下面我们先看一段代码:

      Person代码:

    package com.it18zhang;
    
    /**
     * Created by stone on 2018/9/10.
     */
    public class Person {
        private String name;
        private int age;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    }

      Student代码:

    package com.it18zhang;
    
    /**
     * Created by stone on 2018/9/10.
     */
    public class Student {
        private String name ;
        private int age ;
        private String school;
    
        public String getSchool() {
            return school;
        }
    
        public void setSchool(String school) {
            this.school = school;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    }

    从上面的代码可以看出,代码中存在大量的重复,而按照之前学习的,重复是不可能进行消除的

    二、继承的概念:继承是面向对象最显著的一个特性,继承是从已有的类中派生出新的类,新的类能够吸收已有类的属性和行为,并能狗扩展新的能力,在java类中,如果要实现继承,可以使用如下的语法。

      class 子类 extends 子类 {}

    子类被称为派生类;父类称为超类;

    观察继承的基本实现

    class Person {
        private String name;
        private int age;
    
        public void setName(String name) {
            this.name = name;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public String getName() {
            return this.name;
        }
    
        public int getAge() {
            return this.age;
        }
    }
    
    class Student extends Person { // Student类继承了Person类
    }
    
    public class TestDemo {
        public static void main(String args[]) {
            Student stu = new Student(); // 实例化的是子类
            stu.setName("张三"); // Person类定义
            stu.setAge(20); // Person类定义
            System.out.println("姓名:" + stu.getName() + ",年龄:" + stu.getAge());
        }
    }

    可以发现:子类并没有定义任何的操作,而主类中用的全部的操作都是由Person类进行定义的,这说明:子类即使不扩充父类,也能维持对父类的操作

    1.多个类中存在相同的属性和行为的时候,将这些内容抽取到单独的一个类中,那么多个类无需再定义这些类和行为,只需要继承那个类就可以了;多个类可以成为子类,单独的这个类可以成为父类或者超类;子类可以访问父类中的非私有属性和行为;通过extends关键字让类与类之间产生继承关系。

      2.继承的出现提高了代码的复用性,继承的出现让类与类之间产生了关系,提供了多态的前提。

      3.继承的特点:java只支持单继承,不支持多继承

          一个类只能继承一个父类,不可以有多个父类

          class SubDemo extends Demo{}  //ok

          class SubDemo extends Demo1,Demo2......//error

        java支持多层继承

          class A{}

          class B extends A{}

          class C extends B{}

      4.定义继承需要注意:

        不要为了获取其他类的某个功能而去继承

        类与类之间要有所属关系,xx1是xx2的一种关系

      4.1super关键字

       super和this的用法很像 ;this是本类对象的引用;super代表父类内存空间的标志;当字符类出现同名的成员的时候,可以用super进行区分。当子类调用父类构造函数的时候,可以使用super方法进行调用

      4.2函数的覆盖:子类找那个出现父类中一模一样的方法时候,会出现覆盖操作,也称为重写或者复写

      4.3父类中的私有方法不可以被覆盖;在子类覆盖的方法中,继续使用被覆盖的方法可以通过super.函数名进行获取

    覆盖方法注意事项:覆盖的时候,子类方法权限一定要大于父类方法的权限;静态方法只能覆盖静态方法

      4.5子类的实例化过程:子类中所有的构造函数默认都会访问父类的孔灿构造函数;因为每一个构造函数的第一行都有默认语句super();

      4.6子类会具备父类的数据,所以先要确定父类是如何对这些数据进行初始化的。当父类中没有空参构造函数的时候,子类的构造函数必须通过this或者super语句指定要进行访问的构造函数

      

      

  • 相关阅读:
    【转】VC 隐藏模块、MFC 改变窗口类名
    【转】Reason: The specified virtual disk needs repair.
    关于CreateProcess函数一些经验
    利用NtQuerySystemInformation函数遍历进程,遍历线程,获取线程挂起或运行状态
    uefi安装win7,deepin15双系统后grub没有windows选项
    X64下的虚拟地址到物理地址的转换
    WinDBG 技巧:列出模块(DLL/EXE)里面所有的符号(symbol)
    windows7内核分析之x86&x64第二章系统调用
    使用VS Code写PHP并进行调试
    使用CreateProcess创建新的process 并返回process运行结束返回值
  • 原文地址:https://www.cnblogs.com/bigdata-stone/p/9619493.html
Copyright © 2011-2022 走看看