|
|
本帖最后由 pansong291 于 2019-4-2 12:16 编辑
上篇:42.类的继承(一)---面向对象
下篇:44.抽象类与接口---面向对象
注意:如果你的回复只是“感谢分享”、“辛苦了”之类的与教程内容无关的字眼,还请不要回复本帖,谢谢合作!!!
注意:如果你的回复只是“感谢分享”、“辛苦了”之类的与教程内容无关的字眼,还请不要回复本帖,谢谢合作!!!
注意:如果你的回复只是“感谢分享”、“辛苦了”之类的与教程内容无关的字眼,还请不要回复本帖,谢谢合作!!!
覆盖父类的方法
在子类中可以根据需要对从父类中继承来的方法进行改造----方法的覆盖(也叫重写)。
覆盖方法必须和被覆盖方法具有相同的方法名称、参数列表和返回值类型。
例如前面那个 Student 程序,它继承了 Person 类的 getInfo 方法,这个继承到的方法
只能打印出学生的 name 和 age,不能打印出学生专有的信息,比如学校的名称等,这时我
们就应该在类 Student 中重新编写一个 getInfo 方法,这就是方法的覆盖。程序修改后如下:
程序清单:Student1.java
class Person
{
public String name;
public int age;
public void getInfo()
{
System.out.println(name);
System.out.println(age);
}
}
class Student extends Person
{
String school=new String();
public void study()
{
System.out.println("Studding");
}
public void getInfo()
{
super.getInfo();
System.out.println(school);
}
public static void main(String[] args)
{
Person p=new Person();
p.name="person";
p.age=30;
p.getInfo();
Student s=new Student();
s.name="student";
s.age=16;
s.school="清华大学";
s.getInfo();
s.study();
}
}
运行结果:
person
30
student student student student
16
清华大学
Studding
从以上运行结果可以看出,p.getInfo()这一句中所用到的方法是父类 Person 的,而
s.getInfo()这一句用的方法却是子类 Student 的。如果在子类中想调用父类中的那个被覆
盖的方法,我们可以用 super.方法的格式,如程序中的 super.getInfo();
注意:覆盖方法时,不能使用比父类中被覆盖的方法更严格的访问权限,如:父类中的
方法是 public 的,子类的方法就不能是 private 的。关于访问权限中更多的知识,我们将
在本章结尾时详细讲解,在这里大家只要有个印象就行了。
final 关键字
在 Java 中声明类、属性和方法时,可使用关键字 final 来修饰。
✔ final 标记的类不能被继承。
✔ final 标记的方法不能被子类重写。
✔ final 标记的变量(成员变量或局部变量)即成为常量,只能赋值一次。
如:
final int X=3;
X=4; //出错
final 标记的成员变量必须在声明的同时或在该类的构造方法中显式赋值,然后才能使
用。
class Test
{
final int X=3;
}
或者:
class Test
{
final int X;
Test()
{
X=3;
}
}
✔ 方法中定义的内置类只能访问该方法内的 final 类型的局部变量,用 final 定义的局
部变量相当于是一个常量,它的生命周期超出方法运行的生命周期,这种情况的应用,
我们已在第三章中讲过。将一个形参定义成 final 也是可以的,这就限定了我们在方
法中修改形式参数的值。
多学两招:
我们已经知道 final 标记的变量(成员变量或局部变量)即成为常量,只能赋值一次,
但这个“常量”也只能在这个类的内部使用,不能在类的外部直接使用。
当我们用 public static final 共同标记常量时,这个常量就成了全局的常量。而且
这样定义的常量只能在定义时赋值,即使在构造函数里面也不能对其进行赋值。如:
class Xxx
{
public static final int X=3;
......
}
在 Java 中,我们看到的常量的定义方法,总是用 public static final 的组合方式进
行标识。Java 中的全局常量也放在一个类中定义,给我们的使用带来了很大的方便,譬如,
我们在程序中想使用最大的浮点小数,我们知道有个 Float 类封装了浮点小数的操作,我们
就很容易想到在 Float 类的文档帮助中去查找这个常量的具体英文拼写。
上篇:42.类的继承(一)---面向对象
下篇:44.抽象类与接口---面向对象 |
|