java基础学习——继承

文章详细介绍了Java中的继承概念,包括子类继承父类的属性和方法,代码演示了如何创建和使用子类,以及继承带来的代码复用和维护性提高。同时,提到了继承的弊端,如增强耦合性和可能影响子类独立性。此外,文章还讨论了super关键字的使用,构造方法的访问特点,方法重写的原则和注意事项,以及final和static关键字的作用。
摘要由CSDN通过智能技术生成

1.继承的概述

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

继承的格式:

·格式:public class 子类名 extends 父类名{ }

·范例:public class Zi        extends Fu{ }

·Zi:是子类,也被称为派生类

·Fu: 是父类,也被称为基类、超类

2.子类的特点

子类可以有父类的内容

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

3.代码演示

package com.aynu1;

public class Fu {
    public void show(){
        System.out.println("show方法被调用");
    }
}
package com.aynu1;

public class Zi extends Fu{    //Zi类继承了Fu类的方法
    public void method(){
        System.out.println("method方法被调用");
    }
}
package com.aynu1;

public class Demo {
    public static void main(String[] args) {
        Fu f =new Fu();
        f.show();

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

运行结果 :

        show方法被调用
        method方法被调用
        show方法被调用

4.继承的好处和弊端 

继承好处:

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

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

继承弊端:

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

什么时候使用继承:

继承体现的关系: is a

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

举例: 苹果和水果,猫和动物,猫和狗  (苹果是水果的一种可以使用继承;猫是动物的一种可以使用继承;猫和狗不能用继承。)

5.继承中变量的访问特点

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

子类局部范围找

子类成员范围找

父类成员范围找

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

代码演示:

package com.aynu2;

public class Fu {
    public int age=40;
}
package com.aynu2;

public class Zi extends Fu{     //zi类继承fu类

    //身高
    public int height=175;

    //年龄
    public int age=20;

    public void show(){
        int age=30;
        System.out.println(age);
        System.out.println(height);
        //报错
       // System.out.println(weight);
    }
}
package com.aynu2;

public class Demo {
    public static void main(String[] args) {
        //创建对象调用方法
        Zi z=new Zi();
        z.show();
    }
}

输出结果: 
        30
        175

6.super

super关键字的用法和this关键字的用法相似

this:代表本类对象的引用

super:代表父类存储空间的表示(可以理解为父类对象的引用)

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

this.成员变量

访问本类成员变量

this(...)

访问本类构造方法

this.成员方法(...)

访问本类成员方法

super

super.成员变量

访问父类成员变量

super(...)

访问父类构造方法

super.成员方法(...)

访问父类成员方法

代码演示:

package com.aynu3;

public class Fu {
    public int age = 40;
}
package com.aynu3;

public class Zi extends Fu{
    public int age=30;

    public void show(){
        int age=20;
        System.out.println(age);
        //我要访问本类成员变量age
        System.out.println(this.age);
        //我要访问父类的成员变量age
        System.out.println(super.age);
    }
}
package com.aynu3;

public class Demo {
    public static void main(String[] args) {
        Zi z=new Zi();
        z.show();
    }
}

运行结果:

        20
        30
        40 

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

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

        因为子类会继承父类中的数据。所以初始化之前,一定要先完成父类数据的初始化

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

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

        通过使用super关键字去显示的调用父类的带参构造方法

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

推荐:自己提供无参构造方法

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

通过子类对象访问一个方法

子类成员范围找

父类成员范围找

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

9.方法重写

方法重写的概述

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

方法重新的应用

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


/*
 * 手机类
 * */

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

/*
* 新手机
* */
public class NewPhone extends Phone{
/*    public void call(String name) {
        System.out.println("开启视频功能");

    //    System.out.println("给" + name + "打电话");
        super.call("郭帅龙");*/

@Override
    public void call(String name) {
        System.out.println("开启视频功能");

        //    System.out.println("给" + name + "打电话");
        super.call("郭帅龙");
}
}

/*
测试类
* */

public class PhoneDemo {
    public static void main(String[] args) {
        //创建对象
        Phone p =new Phone();
        p.call("郭帅龙");
        System.out.println("--------");

        NewPhone np =new NewPhone();
        np.call("郭帅龙");
    }
}

运行结果:

        给郭帅龙打电话
        --------
        开启视频功能
        给郭帅龙打电话
 

@Override

是一个注解(可以帮助我们检查重写方法的方法声明的正确性) 

方法重写注意事项:

私有方法不能被重写(父类私有成员子类是不能继承的)

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

                               private修饰的只能在本类中被访问

10.java继承中的注意事项

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

Java中类支持多层继承。(例如 父亲继承爷爷,儿子继承父亲)

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

final

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

final修饰的特点 

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

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

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

final修饰局部变量

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

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


public class FinalDemo {
    public static void main(String[] args) {
         //final修饰基本类型变量
        final int age=20;
    //    age=100;
        System.out.println(age);

        //final修饰引用类型变量
        Student s=new Student();
        s.age=100;
        System.out.println(s.age);

    //    s=new Student();
    }
}

public class Student {
    public int age=20;
}

运行结果:

         20
        100

 

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

static 修饰的特点       举例: public static String xxx 

        被类的对象所共享

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

        可以通过类名调用

                当然,也可以通过对象名调用

        推荐使用类名调用 

static访问特点

非静态的成员方法:

        能访问静态的成员变量

        能访问非静态的成员变量

         能访问静态的成员方法

        能访问非静态的成员方法

静态的成员方法:

        能访问静态的成员变量

        能访问静态的成员方法

简而言之就是:静态成员方法只能访问静态成员。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

iuiu啊

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

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

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

打赏作者

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

抵扣说明:

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

余额充值