目录
一、继承
(一)java中的继承体系
1、继承关系 : 类与类之间的关系 (亲血缘的关系)
2、实现关系 : 类与接口之间的关系 (师徒关系)
(二)继承关系
(1)关键字 extends (扩展)
class A extends B
其中:
A 代表 子类 (所有的子孙后代 徒子徒孙)
B 代表 父类 (所有的父辈、祖辈)
(2)案例:
父类: 角色Role
-属性:名字,血量,攻击力......
-方法: 攻击,移动,防御......
package demo;
/*
*
* 角色类(父类)
* */
public abstract class Role {
//成员属性
private String name;
private int hp;
private int att;
}
子类: 英雄Hero ,敌人 Enemy ......
package demo;
/*
*
* 英雄类(子类)
*
* */
public class Hero extends Role{
}
package demo;
/*
* 敌人类(子类)
*
* */
public class Enemy extends Role {
}
(3)继承关系的特点
1、子类可以继承父类所有属性和方法,除了构造方法(两种写法)
2、如果一个类没有写继承,默认都继承自object
3、 在java中一个父类可以扩展多个子类
4、在java中只支持单继承(一个子类只能有一个直接的父类)
5、在java中支持多层继承(爸爸的爸爸叫爷爷)
6、如果父类封装起来,子类肯定无法直接访问属性,但是可以通过父类提供的公共
get/set方法进行访问
(三)如果子类需要使用有参构造创建对象
方式一:在构造方法中使用set方法进行赋值
方式二:利用父类的有参构造方法进行赋值
(四)继承的好处
1、提高代码的维护性(增删改)
弊端:增加了类与类之间的耦合度(权衡)
2、提高代码的扩展性
如果父类要新增功能或者增强功能(修改),复核非入侵性编程的原则
可以继续扩展其他的子类(子类方法的重写)
(五)继承的使用场景
当多个类具有共同的属性和方法时,可以考虑将这些共性抽离出来
二、super 关键字
含义:代表当前类的父类的引用或类名
super(); //代表调用父类的空参构造
super.方法名() ;代表调用父类的成员方法
#、方法的重写(青出于蓝而胜于蓝)
1、出现在继承体系中
2、方法名相同,
3、参数列表相同,
4、返回值相同
——子类对父类方法的重写。
#、方法的重载(十八般武艺样样精通)
1、出现在同一个类中
2、方法名相同
3、参数列表不同(数量、类型、顺序至少其一不同)
4、与返回值无关
三、 抽象(建立在继承的基础上进一步进行强制规定)
(一)关键字
abstract—— 抽象的修饰符。
(二)修饰类(类→抽象类)
1、抽象类无法实例化(new 不出来)
2、只能被继承(老天爷不能现身,人间只能由天子来管理)
3、普通类中有的元素,抽象类中都有,抽象类中还可以有抽象方法
(三)修饰方法(一般方法→抽象方法)
1、没有方法体
2、抽象方法必须被重写
3、抽象方法只能出现在抽象类或接口中
(四)抽象的使用场景
1、当父类绝对不需要创建对象时,可以考虑将父类抽象化
2、如果抽象类中的某些方法不需要立即实现,未来是靠子类来实现,可以考虑将此方法抽象化
# @Override
含义:java中自带注解
作用:验证本方法是否是对父类方法的重写
@Override
public void backHome() {
// TODO Auto-generated method stub
}
#递归
[Java]方法递归——经典案例_java 递归_迷糊小丸子o_o的博客-CSDN博客
Java学习:递归 - 菜鸟-传奇 - 博客园 (cnblogs.com)
参考以上文章后,尝试用以下代码来理解:
package demo;
public class Demo02 {
public static void main(String[] args) {
recursion_display(8);
}
/*
关于 递归中 递进和回归的理解*/
public static void recursion_display(int n) {
int temp=n;//保证前后打印的值一样
System.out.println("递进:" + temp);
if (n > 0) {
recursion_display(--n);
}
System.out.println("回归:" + temp);
}
}
运行结果:
递进:8
递进:7
递进:6
递进:5
递进:4
递进:3
递进:2
递进:1
递进:0
回归:0
回归:1
回归:2
回归:3
回归:4
回归:5
回归:6
回归:7
回归:8
如图:
# final 关键字
final 修饰类,类会成为最终类,不可被继承(断子绝孙类)(String Scanner)
final 修饰成员方法,必须在构造或定义时初始化,且初始化后固定不变不能更改,不能被重写
final 修饰变量,则变量只能被赋值一次,之后无法更改。(变量变为常量)
final 修饰属性,最终属性,无法修改值
-基本数据类型 无法修改本身的值
-引用数据类型 无法修改地址值,内部的内容可以修改
final 关键字与 abstact 关键字是互斥的
static final 定义常量