Java_面向对象04:继承

什么是继承

一种类与类之间的关系

 根据不同类之间共有的东西抽取出来放到父类中 

 猫和狗可以继承父类中开放的所有属性和方法,这样在编写猫和狗的类的时候只需要编写他们特有的东西。

新增别的动物类复用。

继承具有什么特点

使用已存在的类的定义作为基础建立新类。

新类的定义可以增加新的数据或者新的功能,也可以用父类的功能,但不能选择性地继承父类。不能选择性的意思是,子类一旦继承父类,它将获得父类一切开放的特征,没有选择余地。

满足“A is a B”的关系就可以行成继承关系。

 继承的实现

 java继承只能是单继承,一个孩子只能有一个亲爹。

首先创建父类

还是老三样 公有属性、无参构造、getter 和 setter、公用的方法

创建子类,子类独有的属性、无参构造、getter 和 setter、方法

私有的属性获取不到只能通过getter、setter

ctrl + shift +o 快速导包

 子类的独有成员,其他的兄弟成员也是访问不到的。

        ]654567890-

package com.immoc.test;

import com.immoc.animal.Cat;
import com.immoc.animal.Dog;

public class Test {
    public static void main(String[] args) {
        Cat cat1 = new Cat();
        cat1.setName("花花");
        cat1.setSpecies("英国短毛");
        cat1.eat();
        cat1.run();
        System.out.println("==================================");
        Dog dog1 = new Dog();
        dog1.setName("土土");
        dog1.setMonth(11);
        dog1.eat();
        dog1.sleep();

    }
}

方法重写 

方法重载:1、在同一个类中2、方法名相同,参数列表不同(顺序、个数、类型)3、方法返回值、访问修饰符不做限制

4、与方法的参数名称无关

方法重写

 1、有继承关系的类中2、子类重写父类方法

3、方法名、参数列表(顺序、个数、类型)完全相同、方法返回值

4、访问修饰符?

5、与方法的参数名无关,无关

 

 

 与方法的参数名无关,无关

除了方法,属性 也是可以重写的。

在子类可以定义与父类重名的属性,最后也是使用子类重写后的值。

访问修饰符

private-访问限定最小的修饰符

只允许在本类当中访问。在当前类内的方法进行访问无问题(get set)。

public-访问权限最大

允许任意位置访问。

只要能正确加载public成员所在的类型,就可以访问到public定义的成员。

protected

当前类中可以访问。同包当中的子类也可以访问。跨包子类调用也可以调用。

同包无继承关系可以调用。(同包的情况下都可以访问到)

跨包无继承关系的类不能调用。

默认访问权限

允许在当前类、同包子类、非子类可以调用、

 跨包子类、非子类不允许调用

访问修饰符对方法重载的影响

子类对方法重写的过程中,允许对访问修饰符与父类方法不同。访问范围要求大于等于父类范围。

super关键字

用于,父类对象的引用。我们可以通过super去访问父类中允许被子类继承的任意成员。

第一个super 

需要注意一点,父类的构造方法是不允许被子类继承的,我试了一下其实是可以的,只不过构造方法一定要配合new去使用。

不能被重写。

 继承的初始化顺序

满足继承关系的子类对象是如何产生的

Cat one = new Cat();
Cat one
父类静态属性---->父类静态代码块---->子类静态属性---->子类静态代码块
new Cat()
父类构造代码块---->父类无参构造器---->子类构造代码块--->子类无参构造器
package com.immoc.animal;

public class Animal {
    //成员属性:昵称、月份、品种
    private String name;
    private int month;
    private String species;
    public int temp =100;

    private static int st1= 11;
    public static int st2 = 22;

    static {
        System.out.println("我是父类静态代码块");
    }

    {
        System.out.println("我是父类构造代码块");
    }

    //无参构造
    public Animal() {
        System.out.println("我是父类无参构造器");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getMonth() {
        return month;
    }

    public void setMonth(int month) {
        this.month = month;
    }

    public String getSpecies() {
        return species;
    }

    public void setSpecies(String species) {
        this.species = species;
    }

    //吃东西
    public void eat() {
        System.out.println(this.getName() + "is eating");
    }

    public void eat(String name) {
        System.out.println(name + "is eating");
    }
}
package com.immoc.animal;

public class Cat extends Animal {
    private double weight;
    public static int str3 =33;

    static {
        System.out.println("我是子类静态代码块");
    }

    {
        System.out.println("我是子类构造代码块");
    }
    public Cat() {
        System.out.println("我是子类的无参构造方法");
    }

    public double getWeight() {
        return weight;
    }

    public void setWeight(double weight) {
        this.weight = weight;
    }

    //跑动的方法
    public void run() {
        System.out.println(this.getName() + "是一只" + this.getSpecies() + "在快乐的奔跑");
    }
}
package com.immoc.test;

import com.immoc.animal.Cat;

public class TestXunXu {
    public static void main(String[] args) {
           Cat one = new Cat();
    }
}

那么我们就面对一个问题,子类是否有权力选择调用父类哪个构造方法。 

我们子类有参构造的时候发现父类的有参构造被无视掉了。还是去找的父类的无参构造。

java继承的一个重要特点:子类继承没有显示标注的时候默认调用父类的无参构造方法。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值