8.Java(继承)

本文详细介绍了Java中的继承概念,包括代码块的分类、继承的好处与坏处、构造方法的作用、就近原则和方法重写的注意事项。同时,讨论了final关键字在防止方法重写和变量修饰中的应用,以及提供了相关练习题。
摘要由CSDN通过智能技术生成
  • 代码块

  • 继承

  • 方法重写

  • Final关键字

代码块

代码块 { }

通过位置、声明可以将代码块分为

  • 局部代码块:定义在方法中的代码块

在方法中出现,限定变量周期,及早释放,提高内存利用率

  • 构造代码块:在类中方法外出现,多个构造方法中相同的代码存放到一起,每次调用构造都执行,并且在构造方法前执行

当创建对象时,有构造代码块,先执行构造代码块,在执行构造方法。

  • 静态代码块:在类中方法外出现,加了static关键字修饰

用于对类进行初始化,在加载的时候执行,只执行一次

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

class Fu {
    static {
        System.out.println("父类  静态构造代码块");
    }
    {
        System.out.println("父类  构造代码块");
    }
    public Fu () {
        System.out.println("父类  构造方法");
    }
}

class Zi extends Fu {
    static {
        System.out.println("子类  静态构造代码块");
    }
    {
        System.out.println("子类  构造代码块");
    }
    public Zi() {
        System.out.println("子类  构造方法");
    }
}

继承

继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。

继承的好处:

提高代码的复用性

提高代码的维护性

坏处:

使得类和类之间产生了关系,增加了耦合

(软件的设计原则:高内聚,低耦合)

(高内聚:一个事物,独立完成某项功能能力)

(低耦合:事物和事物之间产生了依赖关系)

注意事项:

  • Java只支持单继承,但可以多层继承
  • 父类私有成员子类无法继承
  • 构造方法不继承
  • 当创建子类对象时,先调用父类的构造方法,完成父类数据初始化

父类构造的作用:

当创建子类对象时,会先调用父类的构造方法,因为子类继承父类数据,甚至还要使用父类的数据,当父类没有完成数据初始化,子类就无法继承。

就近原则

变量访问遵循就近原则,先在本类局部范围找(形参、方法),没有的话,在成员范围找(类中方法外)到就使用

如果在本类成员范围没有找到,就到父类成员范围找,找到使用

区别

区别
super在子类方法中使用,代表父类的引用
this代表本类的一个引用,this可以访问本类成员

方法重写

当子类出现和父类一样(方法名、参数列表、返回值)的一个方法,就会发生方法覆盖,子类会覆盖父类方法。

注意事项

  • 父类中私有方法不能被重写

  • 子类重写父类方法时,访问权限不能更低,最好就一致

  • 父类静态方法,不参与重写

  • 父类final修饰的方法,子类不能重写

  • 构造方法不能重写

区别:

方法重载:允许一个列表中,可以定义多个同名方法,只要他们参数列表不同(参数个数、形参类型)

方法重写:发生在继承中,子类可以提供一个与父类一样的方法(方法名、形参列表、返回值)会发生子类方法覆盖父类方法的对象

final关键字

继承中有方法重写的现象,有时候我们并不想子类重写父类方法,所有就使用到了final关键字

final:可以修饰类,变量,成员方法

修饰变量: 被修饰的变量成为常量

修饰方法: 被修饰的方法不能被重写

修饰类: 被修饰类不能被继承

final修饰基本数据类型指的是值

final修饰引用数据类型,指的是地址值

练习

//测试类
public class Test {
    public static void main(String[] args) {
        Dog d=new Dog();
        d.name="大黄";
        d.age=5;
        System.out.println("名字:"+d.name);
        System.out.println("年龄:"+d.age);
        d.eat();
        Cat c=new Cat();
        c.name="小咪";
        c.age=4;
        System.out.println("名字:"+c.name);
        System.out.println("年龄:"+c.age);

        c.eat();
    }
}



//父类
public class Demo {
    String name;
    int age;
    public void run(){
        System.out.println("跑步");
    }
    public void eat(){
        System.out.println("吃饭");
    }
}

//子类 狗
public class Dog extends Demo{
    public void eat(){
        super.eat();
        System.out.println("吃骨头");
    }
}


//子类 猫
public class Cat extends Demo{
    public void eat(){
        super.eat();
        System.out.println("吃鱼");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值