14、abstract 关键字,局部变量和final 关键字

14_abstract 关键字,final 关键字和多类合作

1、abstract 关键字
1.1 abstract 关键字的使用
abstract 关键字的使用:
		1、用来定义 Java 中的抽象类,抽象方法
		2、父类中使用 abstract 关键字修饰的成员方法,要求子类强制重写
		3、abstract 修饰的类无法实例化

使用软件为 Eclipse

/* 
 * 复制快捷键 Ctrl + Alt + ↑/↓ 
 * 删除快捷键 Ctrl + D
 * 撤销快捷键 Ctrl + Z
 * 
 * 【Eclipse 快速修复】
 * 		Ctrl + 1 
 * 
 * 【Eclipse 快速补齐】
 * 		Alt + /
 */

/* 
 * abstract 关键字作用:
 * 		父类中使用 abstract 关键字修饰的成员方法 要求子类强制重写
 */

/** 
 * 使用 abstract 修饰的成员变量和成员方法只能定义在 abstract 修饰的类中或者 interface 修饰的接口中
 * 
 * 设计一个原神角色基础抽象类 设置两个抽象方法 对应两个技能
 * 
 * @author Echo
 */
abstract class BaseYuanShenRole {
	
	public abstract void e();
	
	public abstract void q();
	
}

/**
 * ZhongLi 类继承 BaseYuanShenRole 类
 * 
 * @author Echo
 */
class ZhongLi extends BaseYuanShenRole {
	
	public void e() {
		System.out.println("地心");
	}
	
	public void q() {
		System.out.println("天星");
	}
	
}

/**
 * LingHua 类继承 BaseYuanShenRole 类
 * 
 * @author Echo
 */
class LingHua extends BaseYuanShenRole {
	
	public void e() {
		System.out.println("神里流·冰华");
	}
	
	public void q() {
		System.out.println("神里流·霜灭");
	}
	
}

/* 
 * abstract 修饰的类无法实例化
 */
public class Demo1 {
	
	public static void main(String[] args) {
		//实例化 抽象类 BaseYuanShenRole 的子类 ZhongLi 类对象和 LingHua 类对象
		ZhongLi zhongLi = new ZhongLi();
		LingHua lingHua = new LingHua();
		
		zhongLi.e();
		zhongLi.q();
		
		lingHua.q();
		lingHua.e();
		
		
		System.out.println("挑战成功");
	}
	
}

运行结果如下
abstract关键字

1.2 abstract 关键字总结
1、abstract 关键字修饰的方法没有方法体
2、子类必须强制实现父类中使用 abstract 修饰的方法
3、abstract 修饰的方法只能定义在 abstract 修饰的类内或者 interface 接口内
4、abstract 关键字修饰的类无法实例化
2、局部变量
2.1 局部变量的定义
定义在方法内或代码块中的变量 
作用域是该变量所在的方法或者代码块
生存周期是从方法被调用时开始到方法调用结束时结束。
2.2 局部变量的特征
特征:
		1、局部变量先定义后使用
		2、局部变量需要先进行赋值,才能执行后续的操作
		3、局部变量在自身的作用域内有效,一旦超出作用域无效
		4、局部变量在作用域内唯一,不可以重复定义
		5、局部变量在内存的 栈区
		6、局部变量主要用于在代码运行过程中对数据进行临时的存储和使用
2.3 成员变量的特征
特征:
		1、成员变量定义在 class 大括号以内
		2、成员变量是在实例化所在类的对象之后 存储在内存的 堆区 
		3、成员变量的生存周期 从实例化对象开始 到当前对象被销毁结束 (JVM 的 GC 垃圾回收机制 会自动回收)
			 成员变量的作用域 取决于当前对象的所在位置
3、final 关键字
3.1 修饰成员变量
特征:
		1、final 修饰的成员变量一旦被赋值 后期无法修改 可以认为是带有名称的常量
		2、final 修饰的成员变量定义时必须初始化 方式有两种
			1>  定义时直接赋值对应的数据内容
			2>  【高阶用法】使用构造方法给予 final 修饰的成员变量初始化赋值操作
			
/* 
 * final 修饰的成员变量
 */
class TypeA {
	//定义 public 修饰的成员变量 num 初始化为 0
	public int num = 10;
	
	/* The blank final field msg may not have been initialized
	 * 		final 修饰的成员变量 msg 可能尚未初始化
	 * 	final 修饰的成员变量在定义时必须初始化
	 * 	初始化赋值手段有两种
	 * 		1、定义时直接赋值对应的数据内容
	 * 		2、【高阶用法】使用构造方法给予 final 修饰的成员变量初始化赋值操作
	 */
	//public final String msg = "final 修饰的成员变量";
	
	public final String msg; 
	
	public TypeA(String msg) {
		this.msg = msg;
	}
}

public class Demo1 {
	public static void main(String[] args) {
		TypeA typeA = new TypeA("final 修饰的成员变量");
		
		System.out.println(typeA.num);
		System.out.println(typeA.msg);
		
		//没有 final 修饰的成员变量 重新赋值
		typeA.num = 20;
		
		/* final 修饰的成员变量为最终变量 不能被修改 用于定义有名称的常量 */
		//typeA.msg = "常量";
	}
}

运行结果如下
final关键字

3.2 修饰成员方法
特征:
		1、final 修饰的方法不能被重写
		2、final 修饰的方法常见于核心业务逻辑
package com.qfedu.b_final;

class TypeB {
	/* final 修饰的成员方法为最终方法 无法被重写*/
	final public void test() {
		System.out.println("final 修饰的成员方法");
	}
}

class TypeC extends TypeB {
	/**
	 * @Overried
	 */
	/* final 修饰的成员方法为最终方法 无法被重写*/
	//public void test() {}
}

public class Demo2 {
	public static void main(String[] args) {
		TypeB typeB = new TypeB();
	}
}

3.3 修饰类
特征:
		1、final 修饰的类不能被继承 没有子类
		2、Java 中的 String 类型 就是 final 修饰的类型
package com.qfedu.b_final;

final class TypeD {
	int id;
}

/* final 修饰的类没有子类 不能被继承 */
//class TypeE extends TypeD {}

public class Demo3 {
	public static void main(String[] args) {
		TypeD typeD = new TypeD();
		
		/* final 修饰就近原则 */
		typeD.id =10;
		
		typeD.id = 20;
	}
}

3.4 修饰局部变量
特征:
		1、final 修饰的局部变量只能被赋值一次 赋值之后无法修改
		2、引用数据类型使用 final 修饰 指向的地址不可变 但是地址中从存储的数据内容可以改变
package com.qfedu.b_final;

class Person {
	int id;
	String name;
	int age;
}
public class Demo4 {
	public static void main(String[] args) {
		final int num = 10;
		
		/* 
		 * final 修饰的局部变量只能被赋值一次 赋值之后无法被修改 
		 */
		//num = 20;
		
		/* 
		 * 引用数据类型使用 final 修饰时 
		 * 指向地址不可变 
		 * 地址中存储的数据可以改变
		 */
		final Person p = new Person();
		
		/* final 修饰就近原则 修饰谁谁不能改变 */
		//p = new Person();
		p.id = 10;
		p.name = "小芳";
		p.age = 18;	
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值