java基础---抽象类

1. 抽象:模糊, 发现事物的共性, 并向上抽取,提高代码的复用性;如果一个类没有足够的信息来描述一个具体的对象,而需要其他具体的类来支撑它,那么这样的类我们称它为抽象类。

2. 向上抽取,不同的对象有相同的方法 功能, 但方法的内容不同;

//所包含的变量和方法,不能具体描述一个事物, 只是抽象出了一些动物的共性
abstract class animal
{
	//抽象方法也要加上abstract,表示抽象方法
	 abstract void shouting();
}

class dog extends animal
{
	//狗有吼叫,但吼叫的内容是汪汪
	void shouting()
	{
		System.out.println("wangwang");
	}
}

class cat extends animal
{
	//猫有吼叫, 但吼叫的内容是喵喵
	void shouting()
	{
		System.out.println("miaomiao");
	}
}
3. 方法只有声明没有实现时候,该方法就是抽象方法,需要被abstract修饰;抽象方法必须定义在抽象类中,该类也必须被abstract修饰;因为一个类不是抽象类, 很有可能被创建对象, 当对象调用到该类的抽象方法时候,就产生矛盾;

4. 抽象类不能被实例化;也就是不能new 对象;因为调用抽象方法没有意义;

5. 抽象类的所有方法都需要被子类所继承后, 该子类才能实例化,否则该子类还是抽象类;

6.  抽象类有构造函数,因为抽象类的构造函数用于给子类对象进行初始化;

7. Java抽象类中不能有静态的抽象方法。静态方法必须自立更生,要有具体的实现,JVM规定当前类必须为静态方法提供实现。而抽象方法呢?不用实现它。所以这两个修饰关键字是矛盾体,一对冤家

8. 抽象方法必须由子类来进行重写。

9. 抽象方法必须在子类中实现,这句话对吗?

从两个层面来回答:
1. 某一个类如果定义了某个方法是抽象方法,则在本类中不能有任何实现,必须在子类中实现才行。(这里的子类,是广义的子类。)
2. 某一个类如果定义了某个方法是抽象方法,其子类并非一定要实现。不想实现父类中的抽象方法的话,子类同样定义成抽象类就是了。(这里的父类,也是广义的父类。)

10. 抽象类中可以包含具体的方法,当然也可以不包含抽象方法。

11. 只要包含一个抽象方法的抽象类,该方法必须要定义成抽象类,不管是否还包含有其他方法。

12. 子类中的抽象方法不能与父类的抽象方法同名。

13. abstract不能与final并列修饰同一个类。

14.abstract 不能与private、static、final或native并列修饰同一个方法。、

 private不行的原因是private修饰的变量和方法不会被子类所访问, 子类没有这个权限, 而定义抽象的意义就是让子类重写, 子类都不能访问到 , 就不能重写了

1.为什么不能在abstract方法前加static呢?
在没有实例化类的情况下(不讨论abstract类不能实例化),加了static后可以直接通过Class.method()来调用该方法,这个方法都没方法体,你觉得调用这样的方法有实际的意义么。(编程语言就是为了解决生活中的问题,而这个问题在生活中是没有意义的那编程语言也不会去实现它,如: 一台电视机上有一个电源按钮(方法),而这个按钮按下却没有任何作用,你说这样的按钮有实际的意义吗?)。static是静态,就是在编译时已经确定的东西,当然不能是抽象(动态)的,那是运行时才能确定的东西。


2.为什么不能加final?
abstract类需要被继承才能使用的,给方法加了final后方法就不能被导出类(子类)所修改,abstract类还没有实现,而子类又不许修改。这将产生一个没有实际意义的方法(跟就上面说的电源按钮一样)。

15.在抽象类中可以写非抽象的方法,从而避免在子类中重复书写他们,这样可以提高代码的复用性,这是抽象类的优势;接口中只能有抽象的方法。

猜你喜欢

转载自blog.csdn.net/big_bit/article/details/78430440