final关键字:要点
1、使用final声明的类不能有子类。
2、使用final声明的方法不能被子类所覆写。
3、使用final声明的变量即成为常量,常量不可以修改。
在final声明变量时,要求全部的字母大写,如INFO。如果一个程序中的变量使用public static final声明,则此变量将称为全局变量;如public static final Sting INFO="sad";
抽象类的基本概念:
1、包含一个抽象方法的类必须是抽象类。
2、抽象类和抽象方法都要使用abstract关键字声明。
3、抽象方法只需声明而不需要实现。
4、抽象类必须被子继承,子类(如果不是抽象类)必须覆写抽象类中的全部抽象方法。
两个小问题:
①、一个抽象类可以使用final关键字声明吗?
答:不能,如果一个类用final声明,则此类不能被子类继承,而抽象类又必须被子类覆写。
②、一个抽象类可以定义构造方法吗?
答:可以,因为抽象类依然使用的是类的继承关系,而抽象类中也存在各个属性,所以子类在实例化之前必须先要对父类进行实例化。
注意:抽象方法不要使用private声明。
在使用abstract关键字修饰抽象方法时不能使用private修饰,因为抽象方法必须被子类覆写,而如果使用了private声明,则子类无法覆写。
小例子
package Chapter6;
public class Demo2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Student a = new Student("Nick", 21, "Harvard");
System.out.println(a.getInfo());
}
}
abstract class Person {
private String name;
private int age;
public Person(String name, int age) {
this.setName(name);
this.setAge(age);
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return this.name;
}
public int getAge() {
return this.age;
}
public abstract String getInfo();
}
class Student extends Person {
private String school;
public void setSchool(String school) {
this.school = school;
}
public String getSchool() {
return this.school;
}
public Student(String name, int age, String school) {
super(name, age);
this.setSchool(school);
// TODO Auto-generated constructor stub
}
@Override
public String getInfo() {
// TODO Auto-generated method stub
return "name:" + super.getName() + " age:" + super.getAge()
+ " school:" + this.getSchool();
}
}