继承的重写 (Override)
class Base
{
public void function1() //无参数的方法
{
功能1;
}
public void function1(Datatype var1) //带一个参数的方法
{
功能2;
}
}
class Sub extends Base
{
public void function1()
[
//如果需要和父类的function1功能完全一样,直接调用父类的function1()
super.function1();
//如果希望子类的function1()功能和父类的不一样,那么就需要重新写子类的function1()
//各种自定义的..功能
}
}
=================================================================================
继承的重载 (Overload)
默认下子类继承了父类所有的public公有的方法,private的不能获得
方法的重载是相同的函数名,但是方法里面的参数列表不同,和一般方法重载一样
所以当父类的function是private修饰时,子类的function是新建的和父类没关系
class Base
{
public void function1() //无参数的方法
{
功能1;
}
public void function1(Datatype var1) //带一个参数的方法
{
功能2;
}
}
class Sub extends Base
{
public void function1(和父类参数列表不同的参数)
{
功能;
}
}
=================================================================================
=================================================================================
对父类构造器的调用
子类不能获得父类的构造器
子类不能直接使用父类的构造器,但是可以在子类的构造器中使用super(value)来调用父类的构造器
class Base
{
Base(){} //不带参数的构造器
Base(Datatype var)
{
功能1;
}
Base(Datatype var1,Datatype var2)
{
功能1;
功能2;
}
}
class Sub extends Base
{
Sub(){} //不带参数的子类
Sub (Datatype var1) //带一个参数的子类构造器
{
super(var1);
其他功能;
}
Sub(Datatype var1,Datatype var2) //带两个参数的子类构造器
{
super(var1,var2);
其他功能;
}
public static void (String[] arg)
{
//这样使用子类的构造器,简介使用了父类的构造器,对这些初始化
//错误的使用
//new super(var1,var2); 不能直接调用父类的构造器
}
}
1 class FatherA
2 {
3 String name;
4 FatherA()
5 {
6 System.out.println("FatherA不带参数的构造器");
7 }
8 FatherA(String name)
9 {
10 this.name = name;
11 System.out.println("FatherA带一个参数的构造器 : " + name);
12 }
13 }
14
15 class FatherB extends FatherA
16 {
17 String name;
18 int age;
19 String sex;
20 FatherB()
21 {
22 System.out.println("FatherB不带参数的构造器");
23 }
24
25 FatherB(String name)
26 {
27 super(name);
28 System.out.println("FatherB带一个参数的构造器 : " + name);
29
30 }
31
32 FatherB(String name , int age)
33 {
34 super(name);
35 this.age = age;
36 System.out.println("FatherB带两个参数的构造器 : " + name + " : " + age);
37 }
38
39 FatherB(String name ,int age ,String sex)
40 {
41 //super(name,age);其父类没有该构造器,故不能使用啦
42 this(name,age); //调用本类的构造器
43 this.sex = sex;
44 System.out.println("FatherB带三个参数的构造器 : " + name + " : " + age + " : " + sex);
45 }
46
47 public void myFunction()
48 {
49 System.out.println("hello world");
50 }
51 public void myFunction1()
52 {
53 System.out.println("base class function");
54 }
55 }
56
57 public class SonClass extends FatherB
58 {
59 public SonClass() //无参数构造器
60 {
61 //super("admin",20);
62 //System.out.println("显式调用了其父类的带两个参数的");
63
64 super();
65 System.out.println("调用其父类不带参数的构造器");
66 }
67
68 public SonClass(String name)
69 {
70 super(name);//调用其父类带一个参数的构造器
71 System.out.println("显式调用一个参数的..");
72 }
73
74 public SonClass(String name ,int age)
75 {
76 super(name,age);
77 System.out.println("调用两个参数的...");
78 }
79
80 public SonClass(String name , int age ,String sex)
81 {
82 super(name,age,sex);
83 System.out.println("调用三个参数的...");
84 }
85
86 public void myFunction(String name) //重载啦
87 {
88 System.out.println(name + " hello world");
89 }
90
91 public void myFunction() //重写了父类的function()
92 {
93 System.out.println("china hello world");
94 }
95 public static void main(String[] arg)
96 {
97 new SonClass(); //new一个无参数的对象
98 System.out.println("============================");
99 new SonClass("hello"); //new一个带参数的对象
100
101 System.out.println("============================");
102 new SonClass("china",20);
103
104 System.out.println("============================");
105 new SonClass("japan",20,"man");
106
107 System.out.println("============================");
108 (new SonClass()).myFunction();
109
110 System.out.println("============================");
111 (new SonClass()).myFunction("admin");
112 }
113 }