什么是继承

为什么要用类的继承?
当在定义学生这类时,还有大学生,大学计算机专业学生,
于是存在大学计算机专业学生属于大学生,大学生属于学生这种关系。
因此学生具有的方法大学生也具有,使用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) 调用父类的构造方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值