为什么要用类的继承?
当在定义学生这类时,还有大学生,大学计算机专业学生,
于是存在大学计算机专业学生属于大学生,大学生属于学生这种关系。
因此学生具有的方法大学生也具有,使用extends关键字省去了在每个类中重复写代码的必要。
子类继承了父类所有的属性和方法。(不包含构造方法)
方法重写(也叫覆盖,也叫重构):重写的方法必须和被重写方法具有相同的方法名称、参数列表和返回值类型;
重写方法不能使用比被重写方法更严格的访问权限。
重写是类与类之间的关系,两者必须是继承关系。重载是方法与方法之间的关系。
关键字super:
在Java类中使用super来引用父类的成分
super可用于访问父类中定义的属性
super可用于调用父类中定义的成员方法
super可用于在子类构造方法中调用父类的构造方法
super的追溯不仅于直接父类,就是father的father。。。。。。
Supper关键字有两个特殊的用途:
在子类构造函数中调用父类的构造函数
在子类中调用父类的方法。
多态:多态就是重写和重载!而上塑造型或虚方法的调用更好的体现了多态。
上溯造型(也叫虚方法)中,方法是调用子类自己的,属性是调用父类的。(一个引用类型变量如果声明为父类的类型,
但实际引用的是子类对象,那么该变量就不能再访问子类中添加的属性和方法)
public class Father {
public String name = "王惠";
public void bidBoy(){
System.out.println("今天我要是不打你,我就不是你娘!!!");
}
}
public class Son1 extends Father{
public String name1 = "王鹏的姐姐";
public String name = "张三三";
public void bidBoy(){ //重写
System.out.println("我做错了什么?为什么你要打我!!!");
System.out.println(super.name);
System.out.println(name);//如果子类没有name,那么这个name就输出父类的。
}
}
public class Test{
public static void main(String args[]){
Father f = new Son1(); //上溯造型,虚方法调用
f.bidBoy();//这里调用的是子类中重写父类的方法!上溯造型中,方法是调用子类自己的,属性是调用父类的。
System.out.println(f.name);
}
}
输出结果:
我做错了什么?为什么你要打我!!!
王惠
张三三
王惠
方法重载:在同一个类中可以定义多个同名方法。
重载方法的参数列表必须不同,也就是参数个数或参数类型不同!
重载方法的返回值类型可以相同,也可以不同
构造方法重载:
构造方法重载,参数列表必须不同,也就是参数个数或参数类型不同!
可以在构造方法的第一行使用this关键字调用本类的其它(重载的)构造方法
import java.util.Date;
public class Person {
private String name;
private int age;
private Date birthDate;//Date类型引入util包
public Person(String name, int age, Date d) {
this.name = name;
this.age = age;
this.birthDate = d;
}
public Person(String name, int age) {
this(name, age, null);
}
public Person(String name, Date d) {
this(name, 30, d);
}
public Person(String name) {
this(name, 30);
}
}
构造方法不能继承:子类继承父类所有的成员变量和成员方法,但不继承父类的构造方法
调用父类构造方法:子类的构造方法必须调用父类的构造方法!
如果子类的构造方法中没有显示地调用父类构造方法,也没有使用this关键字调用重载的其它构造方法,则系统默认调用父类无参数的构造方法
如果子类构造方法中既未显式调用父类构造方法,而父类中又没有无参的构造方法,则编译出错
在子类的构造方法中可使用语句super(argument_list) 调用父类的构造方法
当在定义学生这类时,还有大学生,大学计算机专业学生,
于是存在大学计算机专业学生属于大学生,大学生属于学生这种关系。
因此学生具有的方法大学生也具有,使用extends关键字省去了在每个类中重复写代码的必要。
子类继承了父类所有的属性和方法。(不包含构造方法)
方法重写(也叫覆盖,也叫重构):重写的方法必须和被重写方法具有相同的方法名称、参数列表和返回值类型;
重写方法不能使用比被重写方法更严格的访问权限。
重写是类与类之间的关系,两者必须是继承关系。重载是方法与方法之间的关系。
关键字super:
在Java类中使用super来引用父类的成分
super可用于访问父类中定义的属性
super可用于调用父类中定义的成员方法
super可用于在子类构造方法中调用父类的构造方法
super的追溯不仅于直接父类,就是father的father。。。。。。
Supper关键字有两个特殊的用途:
在子类构造函数中调用父类的构造函数
在子类中调用父类的方法。
多态:多态就是重写和重载!而上塑造型或虚方法的调用更好的体现了多态。
上溯造型(也叫虚方法)中,方法是调用子类自己的,属性是调用父类的。(一个引用类型变量如果声明为父类的类型,
但实际引用的是子类对象,那么该变量就不能再访问子类中添加的属性和方法)
public class Father {
public String name = "王惠";
public void bidBoy(){
System.out.println("今天我要是不打你,我就不是你娘!!!");
}
}
public class Son1 extends Father{
public String name1 = "王鹏的姐姐";
public String name = "张三三";
public void bidBoy(){ //重写
System.out.println("我做错了什么?为什么你要打我!!!");
System.out.println(super.name);
System.out.println(name);//如果子类没有name,那么这个name就输出父类的。
}
}
public class Test{
public static void main(String args[]){
Father f = new Son1(); //上溯造型,虚方法调用
f.bidBoy();//这里调用的是子类中重写父类的方法!上溯造型中,方法是调用子类自己的,属性是调用父类的。
System.out.println(f.name);
}
}
输出结果:
我做错了什么?为什么你要打我!!!
王惠
张三三
王惠
方法重载:在同一个类中可以定义多个同名方法。
重载方法的参数列表必须不同,也就是参数个数或参数类型不同!
重载方法的返回值类型可以相同,也可以不同
构造方法重载:
构造方法重载,参数列表必须不同,也就是参数个数或参数类型不同!
可以在构造方法的第一行使用this关键字调用本类的其它(重载的)构造方法
import java.util.Date;
public class Person {
private String name;
private int age;
private Date birthDate;//Date类型引入util包
public Person(String name, int age, Date d) {
this.name = name;
this.age = age;
this.birthDate = d;
}
public Person(String name, int age) {
this(name, age, null);
}
public Person(String name, Date d) {
this(name, 30, d);
}
public Person(String name) {
this(name, 30);
}
}
构造方法不能继承:子类继承父类所有的成员变量和成员方法,但不继承父类的构造方法
调用父类构造方法:子类的构造方法必须调用父类的构造方法!
如果子类的构造方法中没有显示地调用父类构造方法,也没有使用this关键字调用重载的其它构造方法,则系统默认调用父类无参数的构造方法
如果子类构造方法中既未显式调用父类构造方法,而父类中又没有无参的构造方法,则编译出错
在子类的构造方法中可使用语句super(argument_list) 调用父类的构造方法