java 第十天 面向对象(高级篇之final与抽象类)

来源:互联网 发布:纺织erp软件 编辑:程序博客网 时间:2024/05/21 09:01

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();
}
}

0 0