Java初识//继承

Java初识

**

继承


前言

这个系列是根据B站UP主:刘二大人的“Java编程语言入门”的系列视频,将所讲的内容手打出来的( 类似课堂笔记 ),配合视频食用效果更佳。

PS:萌新第一次写博客,如发现了错误,请帮忙指出,万分感谢!最后,希望大家食用愉快,一起进步!


一、代码简介

共有两个包:
inherit:分为2个类:Student,Teather
inherit2:分为3个类:Main,Person,Student

二、Package: inherit


Student

代码如下:

package inherit;

public class Student {
    private String name;
    private int age;
    private double grade;


    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 double getGrade() {
        return grade;
    }

    public void setGrade(double grade) {
        this.grade = grade;
    }
}


Teather


代码如下:

package inherit;

public class Teather {
    private String name;
    private int age;
    private double salary;

    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 double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }
}

三、Package: inherit2


Main

package inherit2;

public class Main {
    public static void main(String[] args) {
        Student student = new Student("5",88,8.3);
        //student.setGrade(3.5);

        Person p1 = new Person();
        Person p2 = new Student();//这个是沿着继承树往上走,是向上转型
        //因为student属于person,但person不属于student
        //所以 Student n1 = new Person();是错的

        //p1.setGrade(3.6);
        //这是不允许的,因为p1是一个Person类型的数,而person里面没有setGrade
        //可以进行转换://之所以成功,是因为p2本身就是 new Student()
        ((Student)p1).setGrade(3.6);
        //或者
        Student s2 = (Student) p2;

        /**
        Student s1 = (Student) p1;
        s1.setGrade(3.6);*/
        //这个属于从上往下走,是向下转型,是有风险的
        //除非一开始像p2一样定义的是Student();否则会报错
        //注意! s1.setGrade(3.6);虽然表面上没有问题,但。。
        //运行的时候会报错:类型转换错误;
        //因为在编译(进行类型转换的时候,第18行)的时候,
        // 编译器不会看p1到底是什么类型的,只有运行的时候才会发现是new Person();
        //不含有setGrade

        //如果要确切知道到底p1,p2是什么类型的,可以用
        System.out.println(p1 instanceof Student);
        //instanceof 回复的是 sure或者false;
        //这个答案是false

        System.out.println(p2 instanceof Student);
        //true

        System.out.println(p2 instanceof Person);
        //true//因为student属于person


    }
}
//关于为什么继承的规则这么麻烦
//举个例子:要建立一个核酸的系统,但师生有相同,不同的操作
//用继承就可以放在一起,更好的操作
/*比如:
for(Person p:ps){
  if(p instanceof Student){student 的操作}
  else (p instanceof Teather){}
  else{}
}
 * */

Person

package inherit2;

public class Person {
    //private String name;
    //private int age;

    protected String name;
    protected int age;
    //protected 的作用是允许和它有关系的子类或者子类的子类进行访问

    public Person(){}
    public Person(String name,int age){
        this.name=name;
        this.age=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;
    }
}

Student

package inherit2;

public class Student extends Person{
    //如果省略了包名,编译器会先在import里找, //看完“包和作用域”补充
    // 再在当前的包下找,再到项目下去找, 再去库中去找
    //如果没有写extends +类名,编译器会默认继承Object
    //只允许从一个类中继承
    //Super Parent Base +Class都是被继承类的别名
    //subclass extends 是继承类的别名

    /*public static void main(String[] args) {
        //inherit.Student student;
        //inherit2.Student student2;
        //包名加类名
    }*/
    private double getGrade;

    public Student(){}
    public double getGrade() {
        return getGrade;
    }

    public Student (String name,int age,double getGrade){
        super(name, age);
        //super就是最直接的联系的父类
        //为什么用super呢,因为在Person中已经写明了name和age的this关系
        //为了防止代码冗余,用super代替;
        //同时super里面不应该是空的,应该加上对应的字段
        this.getGrade=getGrade;
    }

    public void setGrade(double getGrade) {
        this.getGrade = getGrade;
    }
    /*
    public String msg(){
        return name +age +grade;
    }
    ***如果按照注释的内容来进行的话,编译器会报错,
    ***因为name和age在Person里面是private的
    ***但如果设为public,其他的类也可以随机访问,达不到封装的目的
    ***所以使用protected
    */
    public String msg(){
        return name+age+getGrade;
    }

}

总结

阳光明媚,万物可期!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值