继承(study!)

发布于:2022-12-20 ⋅ 阅读:(154) ⋅ 点赞:(0)

一、概述

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

格式:public class 子类名 extends 父类名 ()

//父类
public class Fu {
    public void show(){
        System.out.println("show方法被调用");
    }
}
//子类
public class Zi extends Fu{
    public void method(){
        System.out.println("method方法被调用");
    }
}
//测试类
public class Test {
    public static void main(String[] args) {
        Fu f=new Fu();
        f.show();

        Zi z=new Zi();
        z.method();

        z.show();
    }
}

二、继承的好处与弊端

1.好处:提高了代码的复用性(多个类相同的成员可以放到同一个类中)

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

2.坏处:继承让类与类之间产生了关系,类的耦合性增强了,当父类发生变化时子类实现也不得不跟着变化,削弱了子类的独立性

3.什么时候使用继承

假设有两个类A和B,如果满足A是B的一种,或者B是A的一种,就说明他们存在继承关系,这个时候就可以使用继承来体现,否则就不能滥用继承,例如苹果和水果,猫和动物

三、继承中变量的访问特点

在子类方法中访问一个变量:1.子类局部范围找

                                                2.子类成员范围找

                                                3.父类成员范围找

如果都没有则报错。

四、super

关键字 访问成员变量 访问构造方法 访问成员方法
this

this.成员变量

访问本类成员变量

this(...)

访问本类构造方法

this.成员方法(...)

访问本类成员方法

super

super.成员变量

访问父类成员变量

super(...)

访问父类构造方法

super.成员方法(...)

访问父类成员方法

//父类
public class Fu {
    public int age = 40;
}
//子类
public class Zi extends Fu{
    public int age = 20;
    public void show(){
        int age = 30;
        System.out.println(age);
        //访问本类成员变量,即输出age=20
        System.out.println(this.age);
        //访问父类成员变量,即输出age=40
        System.out.println(super.age);
    }
}
//测试类
public class Test {
    public static void main(String[] args) {
        Zi z = new Zi();
        z.show();
    }
}

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

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

原因:因为子类会继承父类中的数据,可能还会使用父类中的数据。所以,子类初始化之前,一定要先完成父类数据的初始化;每个子类构造方法的第一条语句默认都是super()

2.如果父类中只有带参构造方法,该怎么办呢?

通过使用super关键字去显示的调用父类的带参构造方法;在父类中自己提供一个无参构造方法

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

通过子类对象访问一个方法:子类成员范围寻找;父类成员范围寻找;如果没有就报错

七、方法重写

概述:子类中出现了和父类一样的方法声明

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

//手机类
public class Phone {
    public void call(String name){
        System.out.println("给"+name+"打电话");
    }
}
//新手机类
public class NewPhone extends Phone{
    @Override
    public void call(String name){
        System.out.println("开始视频功能");
        super.call(name);
    }
}
//测试类
public class PhoneDmeo {
    public static void main(String[] args) {
        Phone p = new Phone();
        p.call("蟹老板");//给蟹老板打电话

        NewPhone np = new NewPhone();
        np.call("蟹老板");//开始视频功能,给蟹老板打电话

    }
}

注意事项:私有方法不能被重写;子类方法访问权限不能更低(public>默认>私有)

八、java中继承方法的注意事项

java中类只支持单继承,不支持多继承;java中类支持多层继承

九、修饰符

1.包

概述:其实就是文件夹,对类进行分类管理

定义格式:package 包名;例:package com.hello;

带包的java类编译和执行:

手动建包:

按照以前的格式编译java文件 javac HelloWorld.java
手动创建包 在c盘建立文件夹com,然后在com下建立文件夹hello
把class文件放到包的最里面 把HelloWorld.class文件放到com下hello这个文件夹下
带包执行 java com.hello.HelloWorld

自动建包:javac -d.HelloWorld.java           java.com.hello.HelloWorld

2.导包

概述:使用不同包下的类时,使用的时候要写类的全路径,写起来太麻烦了,为了简化带包的操作,java提供了导包的功能

格式:import 包名;

范例:import cn.itcast.Teacher

3.修饰符

(1)权限修饰符

修饰符 同一个类中 同一个包中子类无关类 不同包中的子类 不同包的无关类
private
默认
protected
public

(2)状态修饰符

1.final

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

final修饰的特点:

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

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

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

final修饰局部变量:

变量是基本类型:final修饰指的是基本类型的数据值不能发生改变

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

2.static

static关键字是静态的意思,可以修饰成员方法、成员变量

static修饰的特点:

被类的所有对象共享:判断是否使用静态关键字的条件

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

static访问特点:

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

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到