zoukankan      html  css  js  c++  java
  • Java面向对象之继承

            有关面对对象的特点---继承,通俗理解是将类中的相同的属性或者方法先提取出来形成父类,然后子类需要使用时就产生了继承的关系;但是子类若是有和父类相同的方法时,权限大于父类的时候则使用子类自己的。

            抽象类是一个特殊的父类(这里面方法不定义具体的方法,只是一个单纯的方法名也就是一个单单的声明,具体的方法体则由子类具体使用的时候再定义--这就是抽象方法),但是子类需要使用的时候必须先得把父类的所具有的东西(抽象方法)先写一遍才可以使用,否则就是另一个抽象类了;当然抽象类中也可以不写抽象方法,可以写普通的方法。和子类的关系叫继承!

            接口是比抽象类更抽象的一种类。接口和子类的关系叫实现!接口和抽象类相比的话,可以理解为:抽象类是一个父类,是一个子类必须具备的东西,而接口是特殊的,不是每一个子类都需要具备的东西;一个子类可以有多个接口但是只能有个抽象类。接口由于其定义格式的,其内定义的都是静态常量,都是不能更改的。

    具体含义如下:

    一、继承;

    1、继承的含义:

      继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系。

      (子类会自动拥有父类所有可继承的属性和方法)

     2、继承的格式:

    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()方法
        }
    }

    3、继承的好处及注意事项:

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

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

    ③、在JAVA中,类只支持单继承(只能一个亲爹),一个父类可以多个子类(多个儿子);

    4、继承-子父类中成员变量的特点:

      继承中子父类有同名变量时,如果子类直接有用自己的,没有就用父类的。

    在子类中,访问父类中的成员变量格式:

    super.父类中的成员变量

    (只能在子类中使用,THIS也一样,只能在子类中使用,不能再测试类中使用。)

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

    ①、 子类中出现与父类一模一样(方法名、返回值类型、参数列表都相同)的方法时,会出现覆盖操作,也称为override重写、复写或者覆盖。

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

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

    ③、注意事项:

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

    (public > protected > default > private)

    二、抽象类:

    1、含义:

       方法功能声明相同,但方法功能主体不同。那么这时也可以抽取,但只抽取方法声明,不抽取方法主体。那么此方法就是一个抽象方法。次方法所在的类就是抽象类。

    2、抽象类及抽象方法的定义:

    abstract class 类名 {
    }

    public abstract 返回值类型 方法名(参数);

    3、特点:

    ①、抽象类和抽象方法都是需要abstract 修饰的;

    ②、抽象方法所在的类一定是抽象类;

    ③、抽象类里面可以不写抽象方法(抽象方法可以先定义上方法声明,不写具体的方法体),可以写普通方法;

    public  abstract class Huge {
        public abstract double getArea();//抽象方法
        public void show(){              //普通方法
            System.out.println("这是一个图形");
        }
    }

    ④、抽象类内不可以直接创建对象,其普通方法可以通过子类进行调用;

    ⑤、抽象类一定是个父类;

    ⑥、因为抽象类是子类的父类,是将其共同的方法抽取出来的。所以只有覆盖了抽象类中的所有的抽象方法后,子类才能创建对象。否则子类还是个抽象类。

    ⑦、抽象关键字abstract 不可以和 private 共存:

    (private:私有的方法子类是无法继承到的,也不存在覆盖)

    三、接口:

    1、概念:

      接口是功能的集合,是比抽象类更抽象的方法;

      接口只描述应该具备的方法,并没有具体实现。

    2、定义格式:

      

    public interface 接口名 {
        抽象方法1;//抽象方法:public abstract 返回值类型 方法名(参数列表)
        抽象方法2;
        抽象方法3;
    }

      接口中都是抽象方法,没有普通方法;  

      接口是一种普通的类,还是会产生.class文件的。

    3、类与接口:

      类与接口是实现的关系:implements

      

    class 类 implements 接口 {
        重写接口中方法
    } 

      

    在接口内,所有的抽象方法不管你写不写,都默认是public abstract 修饰。(都是抽象方法、都是静态常量  final定义了,是静态常量,是固定了,不能修改了。static加上后可以通过  类名.变量名 调用

    4、接口中成员的特点:

      ①、接口中不可以创建对象;

      ②、接口中定义的变量、方法都需要固定的修饰符public abstract。

      ③、子类必须覆盖接口中所有的抽象方法后,子类才可以实例化。

    5、接口可以多实现(一个普通类可以实现多个接口)

    6、一个普通类必须先继承的一个的抽象类,然后继承多个接口;

    7、接口也可以继承另外的一个接口;

    8、接口与抽象类的区别:

    相同点:

    ①、都位于继承的顶端,用于被其他类实现或继承;

    ②、 都不能直接实例化对象;

    ③、  都可以包含抽象方法,其子类都必须覆写这些抽象方法;

    区别:

    ①、 抽象类为部分方法提供实现(可以存在普通方法),避免子类重复实现这些方法,提高代码重用性;接口只能包含抽象方法;

    ②、一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口;(接口弥补了Java的单继承)

    ③、抽象类是这个事物中应该具备的(基本的)内容, 继承体系是一种 is..a关系

    ④、接口是这个事物中的额外内容,继承体系是一种 like..a关系

    总结:

    ①、优先选用接口,尽量少用抽象类;

    ②、  需要定义子类的行为,又要为子类提供共性功能时才选用抽象类;

  • 相关阅读:
    hdu2653 Waiting ten thousand years for Love
    Request
    freetextbox 使用方法+下载
    格式化字符串 GridView DataFormatString
    GridView 中的button LinkButton 事件 CommandName
    Response 缓存
    Windows 7下VS2008升级
    ASP.NET中备份SQL Server数据库的方法
    asp.net和c#实现定时备份数据库(SQL Server2000)
    asp.net 中保存 数据库几种对象
  • 原文地址:https://www.cnblogs.com/21-forever/p/10882378.html
Copyright © 2011-2022 走看看