- 0
- 0
- 约7.82千字
- 约 12页
- 2018-12-05 发布于湖北
- 举报
黑马程序员java培训就业班笔记:day09总结新
Day09总结:
上午:
final关键字:
Eg:代码实现:
Class Fu
{
Final void method()
{
//code...访问低层代码
}
}
Class Zi extends Fu
{
Void method()
{
Sop(haha);
}
}
以上代码体现出继承的弊端,因为父类的method的方法访问了系统的低层代码。当子类对其覆写,就不会去访问父类的meth的方法,直接用自己的method这样就出现了代码的不严谨性,所以此时需要用final关键字进行修饰。
注意为什么不把类加final修饰,因为可能该类中会出现很多功能。有些是不需要被覆写的。有些是被调用的。所以只能根据自己所需对相应的成员进行修饰。
Final的特点:
final是一个修饰符,可以修饰类、方法、变量(成员变量、局部变量)
Final修饰的类不可以被继承。
Final修饰的方法不可以被覆盖。
Final修饰的变量是一个常量,只能被赋值一次。是为了增强阅读性,只要数据是固定的,就将这个数据用一个名称来表示,并用final修饰。常量名称都是大写字母,多个单词组成时用下划线来分隔。
代码体现:
Eg:
Class Zi
{
Static final int num=90;
//必须对变量进行初始化,不知道要最终化哪个值,所以必须对它进行初始化。加静态也是一样的,同样的道理,并且被初始化,此时静态和final没有必然的联系。当变量被final修饰时,说明变量已经是一个常量值,此时不能被修饰,可以用static来修饰。
Public stati double PI=3.14;
Void method()
{
Final int x=4;
X=8;
Sop(num);//既然是在操作一个固定的值。为什么不把4直接写在此处,如果这样做的的话,阅读性极差,你根本就不知道它所代表什么?为了增强阅读性,此时数据是不变化的,所以我们需要给它起个名字,并且用final来修饰。这样的话它也是固定的不变的。
注意:被final修饰的数值只能被覆写一次,并且修饰的常量名全部大写,多个单词组成时用下划线进行分隔。Eg:final int PERSON_AGE=4;
}
}
抽象类:
特点:
没有方法体的方法,称为抽象方法,必须存放在抽象方法类中,抽象方法和抽象类必须用abstract关键字来修饰,
抽象类不可以被实例化,为什么?因为调用抽象方法没有意义?为什么?因为它连方法体都不存在?
抽象类必须由其子类将抽象类中的抽象方法都覆盖后,其子类才可以被实例化,否则该子类还是抽象类。
Eg:
Abstract class Demo
{
Abstract void show();
}
Class SubDemo extends Demo
Void show(){}
//此时把父类中抽象方法覆盖,此时才能被实例化。
}
比如水果,它就是抽象的,不具体它包含各种各样的水果,每种水果有它自己的体现。
抽象类涉及的问题?
抽象类中是否可以定义非抽象的方法?
可以 首先抽象类是一个类,类是用来描述事物,只不过描述事物过程中有些信息不具体,抽象类和一般类异同点:
相同:抽象类和一般类都用于描述事物,都可以定义成员。
不同:抽象类中可以定义抽象成员函数,(抽象要么修饰类要么修饰函数)而一般类不可以。
抽象类不可以实例化,一般类可以实例化。
抽象类中是否有构造函数?
有,而且抽象类虽然自身不可以被实例化,但是其子类覆盖了所有的抽象方法后,是可以实例化的。所以抽象类的构造函数是用于给其子类对象进行实例化。
抽象类通常都是一个父类?
是、因为需要子类去覆盖父类中的抽象方法。
代码体现:
Abstract class Demo{
Abstract voif show1();
Abstract void show2();
}
Abstract class SubDemo extends Demo
{
Void show1();
}
Class Test extends SubDmeo{
Void show2();
}
抽象类中可不可以不定义抽象方法?
可以;看上去没有什么意义,其实有点意义,就是不让这个类创建对象,为什么不让创建?
代码体现:
interface InterTest//这是一个测试接口,有4种测试方式。
{
void test1();
void test2();
void test3();
void test4();
}
abstract class InterTestImpl imp
原创力文档

文档评论(0)