继承和关键字

本文探讨了Java中的继承特性,包括其特点、好处、关键字`extends`的使用以及注意事项。接着,详细讲解了`final`关键字在类、成员变量、局部变量和方法中的应用。此外,介绍了`static`关键字及其在静态方法和变量中的作用,以及相关注意事项。最后,阐述了抽象类和抽象方法的概念,以及为何抽象类不能实例化但有构造方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.继承

1.特点

子类会自动拥有父类所有非private修饰的属性和方法

2.好处和关键字

1.继承的出现提高了代码的复用性,提高软件开发效率。

2.继承的出现让类与类之间产生了关系,提供了多态的前提。

关键字:extends

3.注意

1.类只支持单继承,不允许多继承(内部类实现多继承)

2.子类的对象调用方法和属性,子类自己有,使用子类,子类自己没有调用的父类,一直找到object

3.同名时遵循就近查找原则

2.final 关键字

1.类

final修饰的类不能有子类

2.成员变量

变量是一个终值,不能再被改变.所以在定义时必须先手动给一个值,或者是在构造函数赋值.

3.局部变量

1.被final修饰的局部变量是一个终值,不能再被改变,并且放入常量池,增加局部变量寿命

2.定义final局部变量时,不赋值使用会编译不通过。

4.方法

final修饰的方法不允许重写

3.static 关键字

被static修饰的成员变量属于类,不属于这个类的某个对象。

1.static方法

特点:只能访问静态属性和方法

使用:想在不创建对象的情况下调用某个方法,就可以将这个方法设置为static。

2.static变量

注意:static是不允许用来修饰局部变量

3.注意

对象可以使用static,但是不推荐

问题:

  1. 在类方法中优先使用静态的成员方法?
    调用静态的成员方法比非静态的更加节省内存,因为调用非静态还需要创建对象。

  2. 为什么非静态可以调用静态,反之则不可以?

    静态方法是属于类的,即静态方法是随着类的加载而加载的加载字节码文件时,在静态方法区创建静态的属性和方法。而对于非静态方法,在对象创建的时候程序才会为其分配内存,然后通过类的对象去访问非静态方法。因此在对象未存在时非静态方法也不存在,而静态方法自然不能调用一个不存在的方法。

4.抽象类

1.抽象类

  1. 抽象类不一定有抽象方法,但是有抽象方法的一定是抽象类。
  2. 抽象类不能被实例化,也就是说我们没法直接new 一个抽象类。但是可以多态调用。
  3. 抽象类虽然不能被实例化,但有自己的构造方法。
  4. 抽象类不能使用final关键字修饰,因为final修饰的类是无法被继承。
  5. 抽象类的父类可以是非抽象类

注意:一个类继承了一个抽象类,必须实现抽象类里面所有的抽象方法,否则,此类也是抽象类

2.抽象方法

  1. 抽象方法没有自己的主体

  2. 抽象方法不能用private修饰,因为抽象方法必须被子类重写。

  3. 抽象方法也不能用static修饰,抽象类必须通过子类实现。

  4. 抽象类中的非statci(静态)和非abstract(抽象)方法中的this关键字代表的是它的继承类

问题:为什么abstract不能修饰属性?
被abstract修饰的内容都是暂未被实现的,比如类、方法。
属性之所以不能被abstract修饰,是因为属性不存在"尚未被实现"的状态。
在申明变量时,int会默认给age赋予初始值0,
String会默认给name赋予初始值""。
因此属性达不到"尚未被实现的状态",
从而不能被abstract修饰。

问题:为什么抽象类不能实例化却有构造方法呢?
子类创建对象时必然要优先初始化父类的属性变量和实例方法,然后子类继承和调用。如果我们不写,编译器会自动默认一个无参构造方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值