关卡9--继承

本文探讨了面向对象编程中的继承机制,如何利用继承提高代码复用性和维护性,同时介绍了子类与父类的关系、访问特性、构造方法和成员方法的处理。通过实例演示了如何在Java中使用继承,并关注了方法重写、访问权限和注意事项。
摘要由CSDN通过智能技术生成

继承

继承概述

继承是面向对象三大特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法

继承的格式:

public class 子类名 extends 父类名{}
父类也被称为基类和超类
子类也被称为派生类

继承中子类的特点:

子类可以有父类的内容

子类还可以有自己特有的内容

继承的好处和弊端

好处:

提高了代码的复用性(多个类相同的成员可以放在一个类中)

提高了代码的维护性(如果方法的代码需要修改,修改一处即可)

弊端

继承让类和类之间产生了关系,类的耦合性增强了,当父类发生变化时子类也不得不发生变化,削弱了子类的独立性

什么时候使用继承

继承体现的关系:is a

假设法 假如我有两个类A和B,如果他们满足A的一种或者是B的一种,就说明它们存在继承关系,这个时候就可以考虑继承来实现否则就不能滥用继承

继承中变量的访问特点

在子类方法中访问一个变量

首先在子类局部范围找(方法内部)

然后在子类成员范围内找

父类范围找

如果没有就报错(不考虑父亲的父亲)

super

super关键字用法和this关键字用法类似

this代表本类对象的引用

super代表父类存储空间的标识

在这里插入图片描述

继承中构造方法的访问特点

子类中所有的构造方法都会默认访问父类中无参的构造方法

因为子类汇集成父类中的数据,有可能还会使用父类中的数据, 所以子类初始化前,一定要先完成父类数据的初始化

每一个子类构造方法的第一条语句默认都是super

如果父类中没有无参构造方法,只有带参构造方法应该怎么办

通过super()去显示的代用父类的带参构造方法

在父类中自己提供一个无参构造方法

继承中成员方法的访问特点

通过子类访问一个对象

子类范围内查找

父类范围内查找

如果都没有就报错

super内存

内存调用

在这里插入图片描述

在这里插入图片描述

方法重写

指的是子类中出现了和父类中一模一样的方法声明

当子类需要父类的功能而功能主体子类有自己的特有内容时,可以重写父类的方法,这样既沿袭了父类的功能,有定义了子类特有的内容

package jicheng;

public class NewPhoto extends Photo{
    public void call (String name){
        System.out.println("开启视频");
       //System.out.println("给"+name+"打电话");
        super.call(name);

    }
}
package jicheng;

public class Photo {
    public Photo() {
    }
    public void call (String name){
        System.out.println("给"+name+"打电话");
    }
}
package jicheng;

public class Demo {
    public static void main(String[] args) {
        Photo p =new Photo();
        p.call("林青霞");
        System.out.println("-------");
        NewPhoto nb = new NewPhoto();
        nb.call("杨帅");
    }
}
@ovverride 检查重写方法之后方法声明的正确性 

方法重写的注意事项

父类中的私有内容子类是不能继承的 (私有方法不能被重写)

子类方法访问权限不能更低(public>默认>私有)

Java中继承的注意事项

Java中只支持单继承,不支持多继承

Java中类支持多层继承

案例:老师和学生

package tas;

public class Person {
    private String name;
    private int age;

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}


package tas;

public class Teacher extends Person{
    public Teacher() {
    }

    public Teacher(String name, int age){
        super(name,age);
    }
    public void teach(){
        System.out.println("用爱成就每一位学生");
    }

}package tas;

public class Demo {
    public static void main(String[] args) {
        Teacher t = new Teacher();
        t.setAge(30);
        t.setName("jkl");
        System.out.println(t.getName()+","+t.getAge());
        t.teach();
        Teacher t1 = new Teacher("yangshuai",20);
        System.out.println(t1.getName()+","+t1.getAge());
        t1.teach();

    }
}
注意事项:自己补充带参和不带参数的构造函数子类里边没有变量所以要用super传递

案例:猫和狗

package CAD;

public class Demo {
    public static void main(String[] args) {
        Cat x = new Cat();
        x.setAge(10);
        x.setName("asdasd");
        System.out.println(x.getAge()+x.getName());
    }
}
package CAD;

public class Cat extends animal{
    public Cat() {
    }
    public Cat(String name,int age) {
        super(name,age);
    }
    public void zeren(){
        System.out.println("抓老鼠");
    }


}
package CAD;

public class animal {
    private String name;
    private int age;

    public animal() {
    }

    public animal(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

修饰符

包的概念和使用

其实就是文件夹

作用:对类进行管理

定义格式
package  包名;(多级包用.分开)
javac -d.Hello   (自动建包)
java com.it.hello   (执行)

导包的概述

使用不同的包下的类时候要写类的全路径,太麻烦了

为了简化带包操作,Java就提供了导包功能

格式
import 包名.类名

权限修饰符

在这里插入图片描述

状态修饰符

static 静态

final 最终态:

关键字是最终的意思 可以修饰成员方法,成员变量,类

修饰方法表明该方法是最终方法,不能被重写

修饰变量表明该变量是常量,不能被再次赋值

修饰类表明该类是最终类,不能被继承

final修饰局部变量

变量是基本变量:

final指的是基本变量的数据值不能发生改变

变量是引用类型:

final指的是引用类型的地址值不能发生改变,但地址里的内容是可以发生改变的

static

是静态的意思,他可以修饰成员方法成员变量

修饰特点:被类的所有对象共享

也是我们判断是否使用静态关键字的条件

可以通过类名调用,也可以通过对象名调用

推荐使用类名调用

static访问特点

非静态的成员变量:

能访问静态的成员变量

能访问非静态的成员变量

能访问静态的成员方法

能访问非静态的成员方法

静态的成员方法:

能访问静态的成员变量

能访问静态的成员方法

静态成员方法只能访问静态成员
是基本变量:

final指的是基本变量的数据值不能发生改变

变量是引用类型:

final指的是引用类型的地址值不能发生改变,但地址里的内容是可以发生改变的

static

是静态的意思,他可以修饰成员方法成员变量

修饰特点:被类的所有对象共享

也是我们判断是否使用静态关键字的条件

可以通过类名调用,也可以通过对象名调用

推荐使用类名调用

static访问特点

非静态的成员变量:

能访问静态的成员变量

能访问非静态的成员变量

能访问静态的成员方法

能访问非静态的成员方法

静态的成员方法:

能访问静态的成员变量

能访问静态的成员方法

静态成员方法只能访问静态成员

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值