3_Java面向对象编程_继承性
目的:复用代码
Studen类继承于Person类。
class Student extends Person
编译规范,类名称需要首字母大写,方法第一个单词首字母小写,第二个大写。
方法可以复写
class Person {
public void printInfo() {
System.out.println("age = "+age);
}
}
class Student extends Person{
/* override */
public void printInfo() {
System.out.println("school = "+school+"; age = "+getAge());
}
}
父类与子类构造函数的关系
初始化时子类首先调用父类的无参构造函数。
super表示父类。
class Person {
public Person (int age) {
System.out.println("Person (int age)");
this.age = age;
}
}
class Student extends Person{
public Student(String school) {
/* will call the super() */
//super();//不写或写super会调用父类的无参构造函数。
super(5);//调用父类的构造函数。
System.out.println("Student(String school)");
this.school = school;
}
}
public class Ext4 {
public static void main (String args[]) {
Student stu = new Student("ustc");
}
}
抽象方法
抽象方法只声明,不能够实例化对象。由子类extend后再实现其所有的抽象方法。
abstract class Father {
private int money;
public int getMoney() {return money; }
public void setMoney(int money) {this.money = money; }
public abstract void study();
}
class Son extends Father{
public void study() {System.out.println("I am study"); }
}
public class Ext6 {
public static void main (String args[]) {
//Father f = new Father();//class Father是抽象类,不能够实例化对象。
Son son = new Son();
son.study();
}
}
接口
抽象类中一个子类只能继承一个父类,而接口可以突破这个限制。一个子类可以实现多个接口。
接口中都是全局常量与抽象方法
abstract class Father {
private int money;
public int getMoney() {return money; }
public void setMoney(int money) {this.money = money; }
public abstract void study();
}
interface A {
public static final int i = 10;
public abstract int getNum();
}
interface B {
public static String name = "InterfaceB";
public abstract String getName();
}
class Son extends Father implements A,B{//需要实现抽象方法getNum与getName
public int getNum() {return i;}
public String getName() {return name;}
public void study() {System.out.println("I am study"); }
}
public class Ext7 {
public static void main (String args[]) {
Son son = new Son();
System.out.println(son.getName());
son.study();
}
}
抽象类与接口的区别
抽象类:可以定义变量与常量,还可以定义普通的方法。
接口:只能定义常量与抽象类。