华杉研发九学习日记10----javase 封装、继承和多态

华杉研发九学习日记10

一,继承

面向对象的三大特征: 封装 继承 多态

继承(Inherit)也是面向对象三大特征之一。

生活中的继承:某某继承了父亲百亿资产;某某继承了家族产业等等。简单来看,继承就是获得了原本不属于自己的东西。在Java中亦是如此。

​ Java提供了继承(inherit)功能。继承可以解决我们上述的问题,Java中通过extends关键字来实现继承。
父类:在继承关系里,被继承的类叫做父类,也叫基类或超类。

子类:在继承关系里,继承别的类的类叫子类,也叫派生类。

父类和子类是相对而言的。

举例
目前我们要做一个学校的师生管理系统,就需要去定义老师类【name sex age title show() teach()managerStudent(0】,辅导员类【name sex age show) managerStudent0)】,学生类【namesex age show() study()】.从上面的三个类来看,我们会发现不论是老师,辅导员,学生都拥有部分相同的属性【name sex age】和行为【show()】。如果我们每次都这样编写,则会发现重复的代码比较多。这种情况下,那我们就可以以继承的思想进行重复代码的抽取,把重复的代码放入人类
(Person)中【name sex age show()】。一旦提取后,老师类,辅导员类,学生类就没有这些属性和行为了。那么我们就可以使用extends来实现继承,已达到继承原有类没有的属性和行为。实现代码的省写过程。

注意:

  • 继承的格式:
public class 子类 extends 父类{
    ......
}
  • 一旦子类继承了父类,则会继承父类中所有的属性和方法【私有的属性也被继承了,只是不能被访问】
  • java中的继承为单继承【一个子类只能有一个父类,一个父类可以有多个子类】
  • java中支持多层继承,子类继承父类,父类也可以继承其父类
  • 子类继承父类,除了能继承父类中所有的属性和方法之外,也可以扩展自己独有的属性和方法
  • 如果子类继承父类的方法无法满足自己的使用时,可以对方法进行重写
  • 在继承的关系中,子类不能继承父类的构造器
public class AnimallTest {			//测试类
    public static void main(String[] args) {
        Cat cat = new Cat();
        Dog dog = new Dog();
        cat.setName("小喵");
        cat.setAge(1);
        dog.setName("小狗");
        dog.setAge(2);
        cat.catchMouse();
        dog.lookDoor();
    }
}
public class Animal {			//父类 Animal
    private String name;
    private int age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

public class Dog extends Animal {		//子类Dog
    public Dog() {
    }
    public void lookDoor(){
        System.out.println(getName()+"看门!!!");
    }
}
public class Cat extends Animal {		//子类Cat
    public Cat() {
    }
    public void catchMouse(){
        System.out.println(getName()+ "抓老鼠!!");
    }
}

二,方法的重写

​ 方法的重写(overriding)方法的覆盖,方法的复写

​ 方法的重写是在继承的子类,方法名相同,参数列表相同,返回值类型相同,修饰符大于等于父类的访问修饰符。【原型相同】

​ 一旦子类重写了继承的父类的方法,则当调用,执行的是子类被重写后的方法。

在java类中我们可以在方法前加入@Override注解来实现标明该方法是方法的重写,同时告诉JVM该方法是重写,必须满足重写的规则【验证的过程】

三,super关键字

super是超级的意思,在java中代表的是父类对象的意思

如果子类扩展的属性和方法与父类的属性和方法重名时,则继承的父类的属性和方法会被隐藏

单继承的本质是一个子类对象对应一个父类对象。

在java中为了实现真正的单继承,当子类创建对象时,系统会自动的调用父类的无参的构造器先创建父类对象,然后再调用子类的构造器来创=建子类对象,实现真正的一对一情况(单继承)。

super的用法:

​ 1.在子类中,使用super来调用父类被隐藏的属性和方法

​ 2.在子类的构造器中,可以使用super来指明操作系统调用父类的哪个构造器来创建父类对象实现与子类对象一一对应关系,必须在构造器的第一行

注意:super的调用必须放在构造器的第一行

this和super区别

this同类中全局变量,属性,其他构造器。。。。super 访问父类隐藏的属性、方法以及构造器

public class Father {			//父类
    String name="Dad";
    int age=55;
     public Father(){
        System.out.println("父类构造器!!!!");
    }
    public Father(String name,int age){
        System.out.println("父类满参构造器!!!");
    }
    public void fshow(){
        System.out.println("FAFAFAAFAFAFA");
    }
}
public class Son extends Father {	//子类
    String name="Son";
    int age=20;
	public Son() {
        super("父亲",55);//   指明系统使用带有参数的构造器来创建对象
        System.out.println("子类构造器!!!!");
    }
    public void fshow() {
        System.out.println("inherited from Father");
    }

    public void zshow(){
        System.out.println(name);
        System.out.println(age);
        System.out.println(super.name);	//用super调用父类name
        System.out.println(super.age);	//用super调用父类age
        System.out.println("sonsonsonson");
        fshow();
        super.fshow();					//用super调用父类fshow
    }
    public static void main(String[] args) {
        Son son=new Son();
        son.zshow();
    }
}
  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小孤鸡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值