【java】继承和多态?01

前言

这篇文章让我们了解Java中的继承,还有组合,以及相关的拓展


一. 继承(inheritance)引汉瑞特斯 *——*

1.什么是继承?

例如:

 虽然食草动物和食肉动物都是属于动物,但是两者的属性行为上有差别,

所以子类会具有父类的一般特性      也会具有自身的特性。

继承就是子类继承父类的特征和行为。

2.类的继承格式

    继承减少了代码的重复性 ,实现代码的复用      话不多说,上例子:

如:       动物:1,狗  2,猫,,,这三个类来说清楚

class Animal{      //父类
    public String  name;
    public int   age;
    public void local(){
        System.out.println(this.name+"在门口");
    }
}
class Dog extends Animal{    //子类
    public void bark(){
        System.out.println(this.name+"狗叫");
    }
}
class Cat extends Animal{
    public void sleep(){
        System.out.println(this.name+"睡觉");

    }
}

  • 继承呈现了面向对象程序设计的层次结构,由简单到复杂的认知过程
  • 继承主要功能:共性的抽取   实现代码的复用

3.父类成员访问(遵循就近原则)

1.子类中访问父类的成员变量:

  1. 1.子类和父类中成员变量 不同名     子类可以直接访问父类的成员变量
  2. 2.子类和父类中成员变量 同名        子类优先访问的是自己的成员变量

2.子类中访问父类的成员方法: 

  1. 1.子类和父类中成员方法 不同名     子类可以直接访问父类的成员方法
  2. 2.子类和父类中成员方法  同名        子类优先访问的是自己的成员方法

*如果就想访问父类的:            只能在非静态方法中用

  • 加个   super.变量/方法    的形式访问就行    
  • 加个   super()    的形式  调用父类的 构造方法

4.子类构造方法

在构造子类方法时,先执行父类的构造方法,,然后执行子类的构造方法。因为:

  • 子类对象的成员中由两部分,从父类继承下的和子类新添加的。
  • 所以在构造子类对象的时候,先调用父类的构造方法,对父类的的成员进行初始化,然后再完善子类的构造方法,然后再调用子类构造方法,对子类新添加的成员初始化完整。

class Animal{      //父类
    public String  name;
    public int   age;
    //父类的构造方法
    //------------------------
    public  Animal(String name,int age){
        this.name = name;
        this.age = age;
    }

    public void local(){

        System.out.println(this.name+"在门口");
    }
}

class Dog extends Animal{    //子类
    public  Dog(String name,int age){
        super(name,age);
    }
    public void bark(){

        System.out.println(this.name+"狗叫");
    }
}

class Cat extends Animal{
    //子类的构造方法  的构造,需要在构造方法中初始化
    public  Cat(String name,int age){
//调用父类的构造方法,初始化从父类继承的成员对象,并不会生成父类对象
        super(name,age) ;   
    }
    public void sleep(){
        System.out.println(this.name+"睡觉");

    }
}

class Test {

    public static void main(String[] args) {
        //  调用构造方法,  对子类进行实例化对象 
        Dog dog = new Dog("老二",12);
        dog.bark();



        Cat cat = new Cat("老二",12);
        cat.sleep();
    }

注意:

  • 若父类(一般都有默认的无参构造函数) 有无参构造函数,子类构造方法中第一行默认有隐含的super()调用(调用父类构造方法)
  • 如果父类构造方法带有参数,则子类的构造方法中,选择合适的父类构造方法调用,否则编译失败
  • 子类构造方法中,调用父类构造方法时,super()必须再第一行,否则报错
  • super()只能咋i子类构造方法中出现一次,并且不能与this同时出现

5.super和this

两个都可以再成员方法中访问,成员变量或者方法,都可以作为构造方法中的第一句,

但是两者是由区别的:

1.相同点

  1. 都是Java中的关键字
  2. 只能在类的非静态方法中使用,用来访问非静态成员中的方法和字段
  3. 在构造方法中调用时必须是第一句,不能同时存在

2。不同点

  1. this访问本类的方法和属性         this()调用本类构造方法,
  2. super是访问从父类继承下来的方法和属性     super()调用父类构造方法
  3. 构造方法中一定由super()的调用,而this()用户不屑就没有

6.protected 关键字(受保护)

在类和对象中,为了实现封装的特性,Java引入了访问限定修饰符(Public,protected,default,private),主要限定:类或者类成员能否在类外或者其他包中访问,

protected 在当前类,在当前包的不同类,以及在不同包中的子类可以运用

而不同包中的子类是怎么回事?如下

 

今后,protected频繁使用 

7.继承的方式

1.当继承到某个层次时,我们不建议继续继承,就会用到final

 

 3.如果修饰方法,表示改方法不能别重写

2.继承的方式

继承有单继承,多层继承,不同类继承同一类,但是Java中不支持一类继承多个类,c++中支持

所以 就有 接口 ,来解决多继承的问题

8.组合

和继承类似,可以达到代码的重用,组合仅仅是将一个类的实例作为列一个的字段

继承表示对象之间的关系是is——a的关系:狗是动物,猫是动物

组合表示对象之间的关系是has——a的关系:学校(的组成)

class School{
     public Student[]students;
     public Teacher[]teacher;
    public School(){
        this.teacher=new Teacher[10];
        this.students=new Student[10];
    }
}

总结

这篇文章写的是继承相关的,多态的内容在02篇,希望对大家有帮助,感谢支持,这不得三连走起?/!!,

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瞎蹬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值