zoukankan      html  css  js  c++  java
  • java 继承

    一 继承的概念

      在现实生活中,继承一般指的是子女继承父辈的财产。在程序中,继承描述的是事物之

    间的所属关系,通过继承可以使多种事物之间形成一种关系体系。例如公司中的研发部员工

    和维护部员工都属于员工,程序中便可以描述为研发部员工和维护部员工继承自员工,同理,

    JavaEE工程师和Android工程师继承自研发部员工,而网络维护工程师和硬件维护工程师继承

    自维护部员工。这些员工之间会形成一个继承体系,具体如下图所示。

      在Java中,类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类被称作

    子类,现有类被称作父类,子类会自动拥有父类所有可继承的属性和方法。

     二 继承的格式和使用

       在程序中,如果想声明一个类继承另一个类,需要使用extends关键字。

    格式:

      class 子类 extends 父类 {}

    例如:

     

    /*
     * 定义员工类Employee
     */
    class Employee {
        String name; // 定义name属性
        // 定义员工的工作方法
        public void work() {
            System.out.println("尽心尽力地工作");
        }
    }
    
    /*
     * 定义研发部员工类Developer 继承 员工类Employee
     */
    class Developer extends Employee {
        // 定义一个打印name的方法
        public void printName() {
            System.out.println("name=" + name);
        }
    }
    
    /*
     * 定义测试类
     */
    public class Example01 {
        public static void main(String[] args) {
            Developer d = new Developer(); // 创建一个研发部员工类对象
            d.name = "小明"; // 为该员工类的name属性进行赋值
            d.printName(); // 调用该员工的printName()方法
            d.work(); // 调用Developer类继承来的work()方法
        }
    }

     

      在上述代码中,Developer类通过extends关键字继承了Employee类,这样Developer类便是Employee

    类的子类。从运行结果不难看出,子类虽然没有定义name属性和work()方法,但是却能访问这两个成员。

    这就说明,子类在继承父类的时候,会自动拥有父类的成员。

    三 继承的好处

    继承的好处:

      1、继承的出现提高了代码的复用性,提高软件开发效率。

      2、继承的出现让类与类之间产生了关系,提供了多态的前提。

    在类的继承中,需要注意一些问题,具体如下:

      1、Java中,类只支持单继承,不允许多继承,也就是说一个类只能有一个直接父类,例如下面这种情况是不合法的。

      class A{}

           class B{}

           class C extends A,B{}  // C类不可以同时继承A类和B

      2、多个类可以继承一个父类,例如下面这种情况是允许的。

           class A{}

           class B extends A{}

           class C extends A{}   // B和类C都可以继承类A

      3、在Java中,多层继承是可以的,即一个类的父类可以再去继承另外的父类,例如C类继承自B类,而B类又可

    以去继承A类,这时,C类也可称作A类的子类。下面这种情况是允许的。

           class A{}

           class B extends A{}   // B继承类A,类B是类A的子类

           class C extends B{}   // C继承类B,类C是类B的子类,同时也是类A的子类 

      4、在Java中,子类和父类是一种相对概念,也就是说一个类是某个类父类的同时,也可以是另一个类的子

    类。例如上面的这种情况中,B类是A类的子类,同时又是C类的父类。

    四 继承-父子类中成员变量的特点

    成员变量:如果子类父类中出现不同名的成员变量,这时的访问是没有任何问题。

    看如下代码:

    class Fu
    {
        //Fu中的成员变量。
        int num = 5;
    }
    class Zi extends Fu
    {
        //Zi中的成员变量
        int num2 = 6;
        //Zi中的成员方法
        public void show()
        {
            //访问父类中的num
            System.out.println("Fu num="+num);
            //访问子类中的num2
            System.out.println("Zi num2="+num2);
        }
    }
    class Demo 
    {
        public static void main(String[] args) 
        {
            Zi z = new Zi(); //创建子类对象
            z.show(); //调用子类中的show方法
        }
    }

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

    子类是不能直接访问的。

      当子父类中出现了同名成员变量时,在子类中若要访问父类中的成员变量,必须使用关键字super

    来完成。super用来表示当前对象中包含的父类对象空间的引用。

    格式:

      super.父类中的成员变量

    例如:

     

    class Fu
    {
        //Fu中的成员变量。
        int num = 5;
    }
    class Zi extends Fu
    {
        //Zi中的成员变量
        int num = 6;
        void show()
        {
            //子父类中出现了同名的成员变量时
            //在子类中需要访问父类中非私有成员变量时,需要使用super关键字
            //访问父类中的num
            System.out.println("Fu num="+super.num);
            //访问子类中的num2
            System.out.println("Zi num2="+this.num);
        }
    }
    class Demo5 
    {
        public static void main(String[] args) 
        {
            Zi z = new Zi(); //创建子类对象
            z.show(); //调用子类中的show方法
        }
    }

     

    五 继承-父子类中成员方法的特点-重写

    1.子父类中成员方法的特点

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

    会执行子类中的方法,若子类中不存在就会执行父类中相应的方法。

    例如:

    class Fu{
        public void show(){
            System.out.println("Fu类中的show方法执行");
        }
    }
    class Zi extends Fu{
        public void show2(){
            System.out.println("Zi类中的show2方法执行");
        }
    }
    public  class Test{
        public static void main(String[] args) {
            Zi z = new Zi();
            z.show(); //子类中没有show方法,但是可以找到父类方法去执行
            z.show2();
        }
    }

    2.成员方法特殊情况——覆盖

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

    例如:

    class Fu
    {
        public void show()
        {
            System.out.println("Fu show");
        }
    }
    class Zi extends Fu
    {
        //子类复写了父类的show方法
        public void show()
        {
            System.out.println("Zi show");
        }
    }

    3.方法重写(覆盖)的应用:

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

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

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

    需要在来电显示功能中增加显示姓名和头像,这时可以重新定义一个类描述智能手机,并继承原有

    描述手机的类。并在新定义的类中覆盖来电显示功能,在其中增加显示姓名和头像功能。

    在子类中,访问父类中的成员方法格式:

      super.父类中的成员方法();

    例如:

     

    public class Test {
        public static void main(String[] args) {
            new NewPhone().showNum();
        }
    }
    
    //手机类
    class Phone{
        public void sendMessage(){
            System.out.println("发短信");
        }
        public void call(){
            System.out.println("打电话");
        }
        public void showNum(){
            System.out.println("来电显示号码");
        }
    }
    
    //智能手机类
    class NewPhone extends Phone{
        
        //覆盖父类的来电显示号码功能,并增加自己的显示姓名和图片功能
        public void showNum(){
            //调用父类已经存在的功能使用super
            super.showNum();
            //增加自己特有显示姓名和图片功能
            System.out.println("显示来电姓名");
            System.out.println("显示头像");
        }
    }

     

    六 重写的注意事项

    重写需要注意的细节问题:

      子类方法覆盖父类方法,必须要保证权限大于等于父类权限。

    class Fu(){    
    void show(){}
        public void method(){}
    }
    class Zi extends Fu{
    public void show(){}  //编译运行没问题
        void method(){}      //编译错误
    }

      写法上稍微注意:必须一模一样:方法的返回值类型 方法名 参数列表都要一样。

    总结:当一个类是另一个类中的一种时,可以通过继承,来继承属性与功能。如果

    父类具备的功能内容需要子类特殊定义时,进行方法重写。

     

     

     

  • 相关阅读:
    ios UIWebView截获html并修改便签内容(转载)
    IOS获取系统时间 NSDate
    ios 把毫秒值转换成日期 NSDate
    iOS  如何判断当前网络连接状态  网络是否正常  网络是否可用
    IOS开发 xcode报错之has been modified since the precompiled header was built
    iOS系统下 的手机屏幕尺寸 分辨率 及系统版本 总结
    iOS 切图使用 分辨率 使用 相关总结
    整合最优雅SSM框架:SpringMVC + Spring + MyBatis 基础
    Java面试之PO,VO,TO,QO,BO
    Notes模板说明
  • 原文地址:https://www.cnblogs.com/jiejava/p/13247137.html
Copyright © 2011-2022 走看看