美文网首页
面向对象语言特性之继承

面向对象语言特性之继承

作者: Jason_M_Ho | 来源:发表于2017-12-11 20:51 被阅读0次

继承(inheritance)指从已有的类中派生出新的类,新的类能吸收已有的类的属性和方法,并能扩展新的能力。
继承的好处是可以解决编程中的代码冗余的问题,是实现代码重用的重要手段之一。

JAVA只支持单根继承,也就是一个类只能有一个直接父类。

继承的特点

继承表达的是" xxx is a xxx "的关系,如Dog is a Animal;
继承使用关键字extends,语法格式:

访问修饰符 class SubClass extends SuperClass {
}
//例如
public class Dog extends Animal{
}
class.png

Pet是父类,Dog和Cat是子类,子类继承了父类的name属性和print方法,又各有自己的属性和方法。

在JAVA中,子类可以从父类继承以下内容:

  • public和protected修饰的属性和方法,不论子类和父类在不在同一个包中
  • 可以继承默认访问修饰符修饰的属性和方法,但是子类和父类必须在同一个包中
  • 不能继承父类的构造方法
  • 不能继承父类的private属性或方法

this 和 super

super代表父类对象,this代表当前对象;
访问父类构造方法:super(参数)
访问父类属性:super.<父类属性或方法>

  • super只能出现在子类的方法中(方法或是构造方法)
  • super用于访问父类的成员,如父类的属性,方法,构造方法
  • 具有访问权限控制,不能用super访问父类的private属性

继承条件下的构造方法:

  1. 子类构造方法创建对象时,没有通过super显示调用父类有参构造,也没有通过this显式调用自身其他构造方法时,默认调用父类无参构造方法。
  2. 子类构造方法通过super显示调用父类有参构造方法时,执行父类相应的构造方法,而不执行父类的无参构造。
  3. 子类调用自身其他构造方法时遵循以上两条。

示例:

class Pet {  //父类Pet
    private String name;//父类私有属性
    private int age;
    public Pet() {//父类无参构造
    }
    public Pet(String name, int age) {//父类有参构造
        this.name = name;
        this.age = age;
    }
    void showInfo(){  //父类中的方法,显示宠物名字和年龄
        System.out.println("宠物名字是"+name+"年龄是"+age);
    }
}

class Dog extends Pet{ //Dog类继承Pet类
    String strain;  //扩展自己的属性

    public Dog() {
    }
    public Dog(String name, int age,String strain) {
        super(name,age);  //super调用父类有参构造
        this.strain = strain;
    }
    
    void showDog(){
        super.showInfo();//super调用父类中的方法
        System.out.println("宠物是一狗狗,品种是"+strain);
    }
}

class Cat extends Pet{
    String sex;

    public Cat() {
    }
    public Cat(String sex) {//没有显示调用父类有参构造,将默认调用父类无参构造
        this.sex = sex;
    }
    
    //重写了父类中的同名方法,而没有用super调用父类中的同名方法,父类中的方法就被覆盖了
    void showInfo(){
        System.out.println("我是一只小猫");
    }
}

class Tests{
    public static void main(String[] args) {
    //狗狗并没有继承Pet的name和age属性,而是通过父类public的构造方法间接访问
        Dog dog = new Dog("旺财",3,"哈士奇");
        Cat cat = new Cat("公");
        dog.showInfo();
        System.out.println("*********");
        dog.showDog();
        System.out.println("*********");
        cat.showInfo();
    }
}

以上代码将输出:

宠物名字是旺财年龄是3
*********
宠物名字是旺财年龄是3
宠物是一狗狗,品种是哈士奇
*********
我是一只小猫

方法的重写

在子类中根据自身需要对从父类继承来的方法进行重新编写,称为方法的重写,或是方法的覆盖(overriding)。
final 关键字声明类可以把类定义为不能继承的,即最终类;或者用于修饰方法,该方法不能被子类重写。

方法重写必须满足以下要求:

  • 方法名必须相同
  • 参数列表必须相同
  • 返回值类型相同或是其子类
  • 访问权限不能严于父类
  • 父类的静态方法不能被子类重写为非静态方法
  • 子类可以定义与父类同名的静态方法以隐藏父类
  • 父类私有方法不能重写(都不能继承)
  • 不能抛出比父类更多的异常

方法重写与方法重载的区别:

  1. 方法重写是在父子类中的同名方法,而且参数列表要相同,返回值类型也要相同
  2. 方法重载是在同一个类中,同名不同参,与返回值无关

Object类

Object类的部分方法 说明
toString( ) 返回当前对象的有关信息,一个字符串对象
equals( ) 比较两个对象是不是同一个对象,比较的是指针当(对象的内存地址),返回boolean值
clone( ) 生成当前对象的一个副本,并返回
hashCode( ) 返回当前对象的哈希代码值,默认为对象的32位内存地址
getClass( ) 获取当前对象的所属类的信息,返回class对象

Object类是所有类的父类。在JAVA中,所有的JAVA类都直接或者间的继承了java.lang.Object类。在定义一个类时,如果没有显示继承某个类,那么这个类就直接继承Object类,所有对象都继承这个类的方法。

Object类的部分方法 说明
toString( ) 返回当前对象的有关信息,一个字符串对象
equals( ) 比较两个对象是不是同一个对象,比较的是指针当(对象的内存地址),返回boolean值
clone( ) 生成当前对象的一个副本,并返回
hashCode( ) 返回当前对象的哈希代码值,默认为对象的32位内存地址
getClass( ) 获取当前对象的所属类的信息,返回class对象

注意:Object类equals( )方法比较的是两个对象的引用或者说地址,String类重写了equals( )方法,比较的是两个对象的值

相关文章

  • 面向对象语言基础

    面向对象语言的特性 面向对象的语言的特性:封装、继承、多态。 面向对象语言的设计原则 面向对象的语言在进行程序设计...

  • Chapter 9 继承与多态

    9.1 继承 面向对象程序设计语言有三大特性:封装、继承和多态性。继承是面向对象语言的重要特征之一,没有继承的语言...

  • Java 4 继承与多态

    4.1 继承 面向对象程序设计语言有三大特性:封装、继承和多态性。继承是面向对象语言的重要特征之一,没有继承的语言...

  • 面向对象语言特性之继承

    继承(inheritance)指从已有的类中派生出新的类,新的类能吸收已有的类的属性和方法,并能扩展新的能力。继承...

  • 面向对象三大特性(一):封装

    面向对象有三大特性:封装、继承和多态。注意,是面向对象的三大特性而不是Java的三大特性,Java只是面向对象语言...

  • ios基础知识MS2

    OC的理解与特性 OC作为一门面向对象的语言,自然具有面向对象的语言特性:封装、继承、多态。它既具有静态语言的特性...

  • 知识点总结1

    OC的理解与特性 OC作为一门面向对象的语言,自然具有面向对象的语言特性:封装、继承、多态。它既具有静态语言的特性...

  • 笔记《知识梳理》

    OC的理解与特性 OC作为一门面向对象的语言,自然具有面向对象的语言特性:封装、继承、多态。它既具有静态语言的特性...

  • ios 随便抄写

    OC的理解与特性 OC作为一门面向对象的语言,自然具有面向对象的语言特性:封装、继承、多态。它既具有静态语言的特性...

  • objc 知识

    OC的理解与特性 OC作为一门面向对象的语言,自然具有面向对象的语言特性:封装、继承、多态。它既具有静态语言的特性...

网友评论

      本文标题:面向对象语言特性之继承

      本文链接:https://www.haomeiwen.com/subject/ovywixtx.html