JAVA复习,重点,封装,继承,多态&&&&&super()和this()不能共存在同一个构造器中

JAVA复习Day8 继承 多态 重点

8.4面向对象编程三大特征(上接day7)

8.4.4继承的引入

当两个类的属性和方法有很多是相同的,就引出了继承(代码的复用性)

8.4.5继承的原理图

当多个类存在相同的属性和方法时,可以从这些类中抽象出父类,在父类中定义这些相同方法和属性,这样子类就可以不用重新定义这些属性和方法,只需要通过extends来声明继承父类即可
在这里插入图片描述

8.4.6继承的基本语法

class 子类 extends 父类{
} 子类就会自动拥有父类定义的属性和方法

package com;
public class student {//父类
    public String name;//共有属性
    public int  age;//共有属性
    private  double score;//共有属性
    public void setscore(double score) {
        this.score=score;
    }//共有方法
    public void show(){
        System.out.println("学生名:"+name+"\t年龄:"+age+"\t成绩:"+score);
    }//共有方法
}
package com;
public class graduate extends student {//子类
    public void test(){//方法名字一致,只不过有细小的区别
        System.out.println("大学生"+name+"正在考数学");
    }
}
package com;
public class pupil extends student{//子类
    public void test(){
        System.out.println("小学生正在考数学");
    }
}

package com;
public class main {
    public static void main(String[] args) {
        pupil pupil = new pupil();
        pupil.name="小明";
        pupil.age=34;
        pupil.test();
        pupil.setscore(56);
        pupil.show();
        graduate student = new graduate();
        student.name="小王";
        student.age=78;
        student.setscore(99);
        student.test();
        student.show();
    }
}

8.4.7继承的细节

1、子类继承了所有的属性和方法,但是私有属性和访问不能在子类直接访问,要通过父类提供的公共的方法去访问

package com;
public class base {//父类
    public int n1 = 100;
    protected int n2 = 200;
    int n3 = 300;
    private int n4 = 400;//私有数据
    public base() {//无参构造器
        System.out.println("base()");
    }
    public int getN4(){
        return n4;
    }//公有类的方法,得到n4的私有数据
    public void text100() {
        System.out.println("text100");
    }
    protected void text200() {
        System.out.println("text200");
    }
     void text300() {
        System.out.println("text300");
    }
    private void text400() {
        System.out.println("text400");
    }
}
package com;
public class sub extends base {//子类
    public sub() {
       System.out.println("sub()");
    }
    public void sayok(){
        System.out.println(n1+"\t"+n2+"\t"+n3+"\t");
        text200();
        text100();
        text300();
        System.out.println("n4="+getN4());//getn4就是这个公共方法
    }
}
package com;
public class main {
    public static void main(String[] args) {
            sub sub = new sub();
            sub.sayok();
    }
}

正是由于私有的方法和属性在别的里面不能访问,只能在同类里面访问,所以就写一个公共的方法来获取私有数据和私有的方法
在这里插入图片描述
这里的base()就是调用了父类的构造器,sub()就是调用了子类的构造器

2、子类必须调用父类的构造器完成父类的初始化
由于子类要继承父类的所以方法和属性,所以父类第一件事要做的就是调用构造器
见上图的代码和运行结果图

3、当创建子类对象时,不管使用子类的哪个构造器,默认情况下总会去调用父类的无参构造器,如果父类没有提供无参构造器,则必须在子类的构造器中用super去指定使用父类的那个构造器完成对父类的初始化工作,否则编译不会通过 由二可知,必须调用父类的构造器

4、如果希望指定去调用父类的某个构造器,则显示的调用,super()

5、super只能在构造器中使用,在使用时放在构造器的第一行这里可以这样理解,由于创建子类必须要提前完成对父类的初始化,所以必须要放在构造器的第一行

6、super()和this()都只能放在构造器的第一行,因此者两个方法不能共存在一个构造器

7、JAVA所有类都是object的子类

8、父类构造器的调用不限于直接父类,将一直往上追溯直到object类

9、子类最多只能继承一个父类(直接继承),即java中是单继承机制

10、不能滥用继承,子类和父类之间必须满足is-a的逻辑关系

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值