海阔天空

当前时间为:
欢迎大家来到海阔天空https://www.9713job.com,广告合作以及淘宝商家推广请微信联系15357240395

2020java教程:面向对象的三大特性之继承

未分类
2020-08-09 16:58:23
1822677238@qq.com

手机扫码查看

2020java教程:面向对象的三大特性之继承

面向对象的三大特效之继承

生活中的继承
生活中的 “ 继承 ” 是 施方的一种赠与, 受方的一种获得
将一方所拥有的东西给予另一方

程序中的继承
程序中的继承,是类与类之间 特征 和 行为 的一种赠与或获得
两个类之间的 继承关系 , 必须 满足 “ is a ” 的关系
狗继承动物,猫继承动物

父类的选择
现实生活中,很多类别之间都存在着继承关系,都满足 “is a” 的关系
狗是一种动物、狗是一种生物、狗是一种物质
多个类别都可作为 “ 狗 ” 的父类,需要从中选择出最适合的父类

动物
属性:品种、年龄、性别
方法:吃、睡、跑

生物
属性:品种、年龄、性别
方法:呼吸

功能越精细,重合点越多,越接近直接父类。
功能越粗略,重合点越少,越接近 Object(万物皆对象的概念)

父类的抽象
可根据程序需要使用到多个具体类,进行共性抽取,进而定义父类

父类:动物
属性:品种、年龄、性别
方法:吃、睡

子类:狗
属性:品种、年龄、性别
方法:吃、睡、跑

子类:猫
属性:品种、年龄、性别
方法:吃、睡、跑

子类:鱼
属性:品种、年龄、性别
方法:吃、睡、游

在一组相同或类似的类中,抽取出共性的特征和行为,定义在父类中,实现重用

继承
语法:class 子类 exdents 父类{}
应用:产生继承关系之后,子类可以使用父类中的属性和方法,也可定义子
类独有的属性和方法
好处:既提高代码的复用性,又提高代码的可扩展性

Java为单继承,一个类只能有一个直接父类,但可以多级继承,属性和方法逐级叠加。

 

不可继承

构造方法:类中的构造方法,只负责创建本类对象,不可继承
private修饰的属性和方法:
访问修饰符的一种,仅本类可见
父子类不在同一个包中时,default修饰的属性和方法:
访问修饰符的一种,仅同包可见

访问修饰符

            本类   同包   非同包子类  其他
private      1      0       0         0
default      1      1       0         0
protected    1      1       1         0
public       1      1       1         1

什么是方法的覆盖?
子类中是否可以定义和父类相同的方法?为什么需要在子类中定义和父类相同的方法?
当父类提供的方法无法满足子类需求时,可在子类中定义和父类相同的方法进行覆盖。

方法的覆盖
原则:
1.方法列表,参数列表,返回值类型必须与父类相同
2.访问修饰符可与父类相同或是比父类更宽泛
执行:
子类覆盖父类方法后,调用时优先执行子类覆盖后的方法。

public class demos{
    public static void main(String[] args) {
        Dog d=new Dog();
        d.name="狗";
        d.eat("猫粮");
        Cat c=new Cat();
        c.name="猫";
        c.eat("狗粮");
    }
}
class Animal{
    String name;
    public void eat(){
        System.out.println("父类的无参的方法");
    }
    public void eat(String feed){
        System.out.println("父类的吃方法:"+name+"吃了"+feed);
    }
}
class Cat extends Animal{//如果子类没有定义方法,则执行父类的方法
}
class Dog extends Animal{
    public void eat(String feed){//方法的覆盖
        System.out.println("子类覆盖父类的吃方法:"+name+"吃了"+feed);
    }
}

public class demos{
    public static void main(String[] args) {
        Dog d=new Dog();
        d.name="狗";
        d.eat(3);

        Cat c=new Cat();
        c.name="猫";
        c.eat("狗粮");
    }
}
class Animal{
    String name;
    public void eat(){
        System.out.println("父类的吃方法");
    }
}
class Cat extends Animal{
    public void eat(String feed){//方法的重载
        System.out.println("子类的吃方法:"+name+"吃了"+feed);
    }
}
class Dog extends Animal{
    public void eat(int hours){//方法的重载
        System.out.println("子类的吃方法:"+name+"吃了"+hours+"小时");
    }
}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注