继承(extends)


类与类之间并不是彼此孤立的,而是之存在着相互联系的,java中类之间的关系关系大致分为以下几种:

1.        关联关系(老师教给学生上课老师学生学校就是一种关联关系)

2.        继承关系(….is a…..)

3.        聚集关系:

A.        聚合(球员是球队一员)

B.        组合(手是身体的一部分)

千万不要为了获取其他类的功能,简化代码而继承,必须是类与类之间有所属关系才可以继承(用什么是什么来判断 is a

继承中要用到的关键字:extends this super final abstract

this 表示本类引用 super表示父类引用所以当存在继承时,在子类当中可以用super调用从父类继承而来的成员,this调用本类特属的成员,但其实this也引用从父类继承而来的成员,而super却不能应用子类特有成员。当子父类存在相同成员变量时,在子类中引用时,默认的或用this引用时是子类中新定义变量,super引用时为从父类继承而来的那个变量。

当子类和父类有相同的函数时,当子类调用该函数时实际上调用的是子类中的函数,子类继承父类时,子类就有了父类的功能当子类虽具备该功能,但功能的内容却和父类一样,这时没有必要定义新功能,而使用覆盖(重写)的特性,保留功能定义,而重写实现功能。很明显,重写有助于功能扩展。

重写是的注意事项:

1.    子类复写父类方法就,必须保证子类中方法的权限大于等于父类中原方法的权限

2.    静态只能覆盖静态

3.    父类中private de方法不能被复写

 final修饰符可以修饰类,变量,方法。

 final特性:

1.    final修饰的类不能被继承

2.    final修饰的方法不能被重写

3.    final修饰的变量只能被赋值一次,即可修饰局部变量又可修饰成员变量

什么时候用final

挡在描述事物时,一些数据的出现是固定不便的,那么这时候为了增强阅读性。都给这些值起个名字,方便阅读,而这个值不许要改变,所以加上final修饰作为常量。常量的书写规范,常量名必须大写,单词间用下划线隔开,(public static final int DESH_WIDTH = 50.

 

Abstract修饰符可以用来修饰类和方法.当多个类中出现相同功能,但功能主体不同时,可以进行向上抽取,这时,只抽取功能定义,而不抽取功能主体。

Abstract 的特性:抽象方法一定要定义在抽象类中,抽象方法和抽象类必须被abstract修饰。抽象类不可以用new来创建实例对象。因为抽象方法无意义。抽象类中的抽象方法必须有其子类或子类的子类去重写方法体的实现并使用。若子类只重写了部分抽象方法,则此子类任为抽象类,换句话说,就是只要类中含有走向方法,此类就是抽象类,必须的有abstract修饰。

             

 在子类对象进行初始化时父类构造函数也会运行,那是因为子类构造函数的第一行有一个隐式的父类无参构造函数(其形如super()),若父类不存在无参构造函数,我们就必须手动在子类构造函数中加入父类的相应形式的构造函数形如super(参数列表)。

为什么类一定要访问父类中的构造函数?

因为子类继承了父类,就获得了父类的所有属性,所以子类在建立时,需要先查看父类是如何对这些数据初始化的,所以子类在对象初始化时要首先访问父类的构造函数。注意父类构造函数必须写在子类构造函数的第一行,并且当构造函数调用了本类的构造函数时,不可以在调用父类的构造函数,当然此时被调用的子类构造函数也必须在第一行(this(参数列表))。因为比调用的构造函数中已经调用了父类的构造函数了,再调用的话,没有意义

 


 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个使用继承extends关键字的Java代码编写例子: ```java // 定义一个父类Animal class Animal { protected String name; public Animal(String name) { this.name = name; } public void eat() { System.out.println(name + "正在吃东西"); } } // 定义一个子类Cat,继承自Animal类 class Cat extends Animal { public Cat(String name) { super(name); } public void meow() { System.out.println(name + "正在喵喵叫"); } } // 定义一个子类Dog,继承自Animal类 class Dog extends Animal { public Dog(String name) { super(name); } public void bark() { System.out.println(name + "正在汪汪叫"); } } // 主函数入口 public class Main { public static void main(String[] args) { Cat cat = new Cat("Tom"); cat.eat(); // 输出:Tom正在吃东西 cat.meow(); // 输出:Tom正在喵喵叫 Dog dog = new Dog("Jerry"); dog.eat(); // 输出:Jerry正在吃东西 dog.bark(); // 输出:Jerry正在汪汪叫 } } ``` 在上面的例子中,我们定义了一个父类Animal和两个子类Cat和Dog。子类Cat和Dog继承父类Animal的属性和方法,通过extends关键字实现了继承子类可以覆盖父类的方法,同时还可以定义自己特有的方法。通过继承和多态性,我们可以实现代码的复用和扩展。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [java_extends相关,类单继承,为什么接口可以多继承](https://blog.csdn.net/monicateacat/article/details/131084257)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Java 面向对象编程(二)——继承extends关键字,protected修饰符,super关键字](https://blog.csdn.net/weixin_50080344/article/details/124484748)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值