JAVA面向对象之继承、抽象

目录

一、继承

(一)java中的继承体系

(二)继承关系

        (1)关键字 extends (扩展)

        (2)案例:

        (3)继承关系的特点

(三)如果子类需要使用有参构造创建对象

(四)继承的好处

(五)继承的使用场景

二、super 关键字

#、方法的重写(青出于蓝而胜于蓝)

#、方法的重载(十八般武艺样样精通)

三、 抽象(建立在继承的基础上进一步进行强制规定)

(一)关键字

(二)修饰类(类→抽象类)

(三)修饰方法(一般方法→抽象方法)

(四)抽象的使用场景

#  @Override  

#递归

 # final 关键字


一、继承

(一)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-CSDN博客

java中的方法递归-CSDN博客

递归(Java实现)-CSDN博客

[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  定义常量

java final 关键字_java final关键字-CSDN博客

Java中的final关键字,你清楚吗?_肥肥技术宅的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值