类的继承
继承机制下,可以复用写好的类,子类继承了父类,则子类将拥有父类的成员变量和成员方法,减少了代码的冗余,增加了代码的复用性。
语法:
class Parent { }
class Child extends Parent { }
Extends是继承关键字,注意,Java只支持单继承,一个类只能有一个父类,但一个类可以有多个子类
继承示例代码:
class Parent {
int Id;
String name;
public String toString() { //toString方法为对象提供一种特定的输出模式,当对象被Printf()方法打印时,默认调用该方法
return Id+" "+name;
}
}
class Child extends Parent {
}
public class Temporary {
public static void main(String[] args) {
Child child1 = new Child();
child1.Id = 1001;
child1.name = "Jack";
System.out.println(child1); //输出对象的信息
}
}
/*运行结果:
1001 Jack
*/
如示例,Parent类有Id和name两个成员属性以及toString方法,Child类继承了Parent类,则也拥有了这两个成员属性和方法。
构造方法
构造方法是在新建实例化对象时调用的类方法。如果类中没有构造方法,则系统自动调用一个默认的无参构造方法。利用有参构造方法,可以在实例化对象时为对象的成员属性传值。如果类有了有参构造方法,那么系统不会自动调用一个默认的无参构造方法,所以,每个类都自己写一个无参构造方法是一个好习惯
this关键字
this关键字代表一个引用,指向正在调用该方法的当前对象,用在构造方法的第一行,比如this.name代表当前对象的name属性
super关键字
super()表示调用父类中的构造方法,用在子类构造方法的第一行,比如super(Id,name),表示调用父类无参构造,并且传输Id与name作为参数
示例代码如下:
class Parent {
int Id;
String name;
public Parent () { } //无参构造函数
public Parent(int Id,String name) { //有参构造函数
this.Id = Id;
this.name = name;
}
public String toString() { //toString方法为对象提供一种特定的输出模式,当对象被Printf()方法打印时,默认调用该方法
return Id+" "+name;
}
}
class Child extends Parent {
public Child() { } //无参构造函数
public Child(int Id,String name) { //有参构造函数
super(Id,name);
}
}
public class Extend {
public static void main(String[] args) {
Child child1 = new Child(); //用无参构造创建对象
child1.Id = 1001;
child1.name = "Jack";
System.out.println(child1); //输出对象的信息
Child child2 = new Child(1002,"Tom"); //用有参构造创建对象
System.out.println(child2); //输出对象的信息
}
}
/*运行结果:
1001 Jack
1002 Tom
*/
方法的重写
当从父类继承来的方法无法满足子类的需求时,可以在子类中重写父类中已有的方法,那么子类对象就可以调用子类重写的方法,实现了代码的拓展性
示例代码:
class Parent {
int Id;
String name;
public Parent () { } //无参构造函数
public Parent(int Id,String name) { //有参构造函数
this.Id = Id;
this.name = name;
}
public String toString() { //父类中已有的方法
return Id+" "+name;
}
}
class Child extends Parent {
public Child() { } //无参构造函数
public Child(int Id,String name) { //有参构造函数
super(Id,name);
}
@Override //伪代码,重写标示符,作用是通知编译器检查下方的重写方法
public String toString() { //子类中的重写版本
return name+"的"+"Id"+"是"+Id;
}
}
public class Extend {
public static void main(String[] args) {
Child child1 = new Child(); //用无参构造创建对象
child1.Id = 1001;
child1.name = "Jack";
System.out.println(child1); //输出对象的信息
Child child2 = new Child(1002,"Tom"); //用有参构造创建对象
System.out.println(child2); //输出对象的信息
}
}
/*运行结果:
Jack的Id是1001
Tom的Id是1002
*/
注意,重写方法时,方法的返回类型、方法名、参数类型都不变,修饰符所限制的访问范围不能变小,只重写方法体