java 007 面向对象 ——继承,重写

本文探讨了Java中的继承概念,包括单继承的特点和子类如何使用父类的成员。接着讨论了继承带来的问题,即父类方法可能不适合子类需求,通过重写方法来解决这一问题。讲解了`@Override`注解的作用,以及强制重写的需求。然后介绍了`abstract`关键字,用于创建抽象方法和抽象类,要求子类必须实现这些方法。最后,讨论了`final`关键字,它可以修饰成员变量、方法和类,以确保不可变性和防止继承。
摘要由CSDN通过智能技术生成

Java中的继承

/* 继承使用的关键字 */
extends

/* 基本格式 */
class A extends B {
    
}
/*
A类是B类的一个子类
B类是A类的唯一父类!!!

Java是一个单继承面向对象语言
*/

总结:
    1. 继承情况子类可以使用父类的非私有化成员
        成员 ==> 成员变量 + 成员方法
    2. 继承情况下子类不能使用父类的私有化成员
    3. 创建子类对象,会默认调用父类的无参数构造方法
        为什么会调用?
        没有你父母不可能有你
        没有父类就不可能有子类

 

 

 

继承带来的问题

父类的非私有成员方法可以继承给子类使用,但是子类使用的过程中发现父类的方法并不适合子类的实际情况。

【重写】
    重写要求子类中重写的方法,必须和父类的方法声明一致!!!

@Override:
    注解!!!
    这里是用于开启重写的严格检查!!!要求子类中重写父类的方法,方法声明必须完全一致。

继承又带来的问题

继承情况下,父类中的成员方法不符合子类的需求,子类可以利用重写来完成对于方法体的更改,从而满足子类的实际情况。但是该重写是非强制的!!!

实际开发中我们可以利用父类的方式来优化代码,但是同时也要考虑每一个类的独立性。
这里需要强制重写的需求!!!【语法要求】

abstract关键字

[特征]
    abstract修饰的方法是要求子类强制重写的!!

package com.qfedu.b_extends;


abstract class LOLHero {
    abstract public void q();

    abstract public void w();

    abstract public void e();

    abstract public void r();
}

class Yasou extends LOLHero {

    @Override
    public void q() {
        System.out.println("斩钢闪");
    }

    @Override
    public void w() {
        System.out.println("风之障壁");
    }

    @Override
    public void e() {
        System.out.println("踏前斩");
    }

    @Override
    public void r() {
        System.out.println("狂风XXXX");
    }
}

class VN extends LOLHero {

    @Override
    public void q() {
        System.out.println("暗影突袭");
    }

    @Override
    public void w() {
        System.out.println("圣银弩箭");
    }

    @Override
    public void e() {
        System.out.println("离我远一点");
    }

    @Override
    public void r() {
        System.out.println("你看我不到");
    }
}

public class Demo3 {
    public static void main(String[] args) {
        Yasou yasou = new Yasou();
        VN vn = new VN();

        yasou.q();
        yasou.w();
        yasou.e();
        yasou.r();
        System.out.println();
        vn.q();
        vn.w();
        vn.e();
        vn.r();
    }
}

abstract关键字使用总结:


    1. abstract关键字修饰的方法没有方法体
    2. abstract关键字修饰的方法必须定义在abstract修饰的类内或者interface接口内
    3. abstract关键字修饰的类,如果是普通类继承,要求子类必须实现在abstract类内的所有abstract修饰方法
    4. abstract修饰的类没有自己的类对象。

final关键字

字面含义
    最终
可以修饰四类内容
    1. 成员变量
        使用final修饰的成员变量定义时必须初始化
    2. 成员方法
        final修饰的方法为最终方法,不能被子类重写
    3. 局部变量
        final修饰局部变量,赋值 之后不能修改
    4. 类
        final修饰的类不能被继承,没有子类 Java中的String类就是final修饰

package com.qfedu.d_final;

// final修饰的类不能被继承,没有子类 Java中的String类就是final修饰
final class Animal {
    // 使用final修饰的成员变量定义时必须初始化
    final String NAME_OF_ANIMAL = "动物";

    public Animal() {}

    // final修饰的方法为最终方法,不能被子类重写
    final public void eat() {
        System.out.println("吃东西!!!");
    }
}
public class Demo1 {
    public static void main(String[] args) {
        Animal animal = new Animal();
        System.out.println(animal.NAME_OF_ANIMAL);
        // final修饰的成员变量赋值之后无法修改内容
        //animal.name = "daaaa";

//        Dog dog = new Dog();
//        dog.eat();

        int num = 10;
        num = 20;

        // final修饰局部变量,赋值之后不能修改
        final int num1;
        num1 = 10;
        // num1 = 20;
    }
}
public class Demo2 {
    public static void main(String[] args) {
        final Person person = new Person();
        /*
        请问:
            1.成员变量的值是否可以修改???
                可以
            2.person对象是否可以保存其他Person类对象地址???
                不可以
            3.成员变量赋值之后是否可以修改???
                可以
        总结:
            final修饰引用数据类型的变量,引用数据类型变量中保存的地址
            不可以修改,但是指向的空间内容是可以修改的。*/
        person.name = "小明";
        person.age = 16;

        System.out.println(person.name);
        System.out.println(person.age);

        person.name = "老王";
        person.age = 3;

        System.out.println(person.name);
        System.out.println(person.age);
    }
}

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值