【Java知识点总结】 final关键字与抽象类

版权声明:欢迎交流,转载请注明出处。 https://blog.csdn.net/u013034226/article/details/45742409

final关键字:

概念:

学习了继承我们发现继承有一个弊端,就是它会打破封装性;如果不让其他类继承该类,就不会有重写了,→可以通过Java中的几个关键字来实现,final(最终化)。

final关键字是一个修饰符,可以修饰类、方法、变量(成员变量、局部变量、静态变量)。

什么时候用?

当程序中一个数据使用时是固定不变的,这时为了增加阅读性,可以给该数据起个名字,这就是变量,为了保证这个变量的值不被修改,加上final修饰,这就是一个阅读性很强的常量。书写规范:被final修饰的常量名所有的字母都是大写的,如果由多个单词组成,单词间通过  _  连接。

特点:

1,final修饰的类是一个最终类,不饿能够再派生子类(如果类中出现部分可以重写,部分不可以,只要给指定的方法最终化就可以了);

2,final修饰的方法是最红方法,不可以被重写;

3,final修饰的变量是一个常量,只能被赋值一次。


抽象类:

产生:

在描述事物时,没有足够的信息描述一个事物,这时该事物就是抽象事物,它的功能也不具体,这些不具体的功能需要在类中标识出来,使用Java中的关键字abstract(抽象)。

定义了抽象函数的类也必须被abstract关键字修饰,被abstract关键字修饰的类是抽象类。

特点:

1,抽象类和抽象方法都需要被abstract修饰,抽象方法一定要定义在抽象类中;

2,抽象类不可以创建实例,原因:调用抽象方法没有意义;

3,只有覆盖了抽象类中所有的抽象方法后,其子类才可以实例化,否则该子类还是一个抽象类。

【细节问题】

1,抽象类一定是个父类?
是的,因为不断抽取而来的。


2,抽象类是否有构造函数?
有,虽然不能给自己的对象初始化,但是可以给自己的子类对象初始化。
抽象类和一般类的异同点:
相同:
1,它们都是用来描述事物的。
2,它们之中都可以定义属性和行为。

不同:
1,一般类可以具体的描述事物。
抽象类描述事物的信息不具体
2,抽象类中可以多定义一个成员:抽象函数。
3,一般类可以创建对象,而抽象类不能创建对象。

3,抽象类中是否可以不定义抽象方法。
是可以的,那这个抽象类的存在到底有什么意义呢?仅仅是不让该类创建对象。

4,抽象关键字abstract不可以和哪些关键字共存?
1,final:
2,private:
3,static:


练习:

需求:公司中程序员有姓名,工号,薪水,工作内容。项目经理除了有姓名,工号,薪水,还有奖金,工作内容
问题领域中先找寻其中涉及的对象。

程序员
属性:姓名,工号,薪水
行为:工作

项目经理
属性:姓名,工号,薪水,奖金
行为:工作

这些对象是否有关系呢?发现了他们之间的共性,应该存在着关系。
可以将他们的共性向上抽取到共性类型:员工。
员工:
属性:姓名,工号,薪水
行为:工作
发现员工的工作内容本身就不具体。应该是抽象的,由具体的子类来体现的。

abstract class Employee
{
	private String name;
	private String id;
	private double pay;
	/**
	构造一个员工对象,一初始化就具备着三个属性。
	*/
	public Employee(String name,String id,double pay)
	{
		this.name = name;
		this.id = id;
		this.pay = pay;
	}
	/**
	工作行为。
	*/
	public abstract void work();
}

//具体的子类:程序员。
class Programmer extends Employee
{
	public Programmer(String name,String id,double pay)
	{
		super(name,id,pay);
	}
	public void work()
	{
		System.out.println("code....");
	}
}

//具体的子类:经理。
class Manager extends Employee
{
	//特有属性。
	private double bonus;
	public Manager(String name,String id,double pay,double bonus)
	{
		super(name,id,pay);
		this.bonus = bonus;
	}
	public void work()
	{
		System.out.println("manage");
	}
}

class AbstractTest 
{
	public static void main(String[] args) 
	{
		System.out.println("Hello World!");
	}
}

————毕老师day09视频

猜你喜欢

转载自blog.csdn.net/u013034226/article/details/45742409