07继承____

概念

继承的概念来源于----人工智能中的一个概念知识图谱
如果一个实体拥有(has)一个实体,我们就将被拥有的那个实体设置为一个字段。
student has (age,name,grade)
teacher has (age,name,salary)

在这里插入图片描述
如果我们把两个实体中的共性抽象出来。
在这里插入图片描述
为了减少代码冗余,可以引入继承。

代码

首先我们新建一个类person.java

package ex02;

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

然后新建一个类student继承类person,使用关键字extends
包名.extends

package ex02;

public class Student extends Person{
    private double grade;

    public double getGrade() {
        return grade;
    }

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

继承冲突

如果person和son中都有name,student继承哪一个?
java是单继承的。

在这里插入图片描述
在这里插入图片描述

protected

在student中做一个方法msg()
msg可以返回一个字符串(name+age+…)

这样定义这个方法可以吗?不可以因为在person类中,name是一个private类型,只能在类内方法访问。因此我们可以使用里面的public方法get()访问我们想使用的data.
拥有却不能直接访问。。
在这里插入图片描述
可以这样编码。

    public String msg(){
        return this.getName() + "," + this.getAge() + "," + this.getGrade();
    }

如果我既不想让外人(student.age)访问,又可以让继承的类直接访问。
此时就可以使用新的修饰protected.

package ex02;

public class Person {
    protected String name;
    protected int age;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
package ex02;

public class Student extends Person{
    protected double grade;

    public double getGrade() {
        return grade;
    }

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

    public String msg(){
        return name + "," + age + "," + grade;
    }


}

这样修饰就不会报错了。

super调用父类方法

package ex02;

public class Person {
    protected String name;
    protected int age;

    public Person(String name, int age){
        this.name  = name;
        this.age = age;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

super调用

package ex02;

public class Student extends Person{
    protected double grade;

    public Student(String name, int age, double grade){
        super(name, age);
        this.grade = grade;

    }
    public double getGrade() {
        return grade;
    }

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

    public String msg(){
        return name + "," + age + "," + grade;
    }
}

person可以引用student

package ex02;

public class Student extends Person{
    protected double grade;

    public Student(String name, int age, double grade){
        super(name, age);
        this.grade = grade;

    }
    public double getGrade() {
        return grade;
    }

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

    public String msg(){
        return name + "," + age + "," + grade;
    }
}

类型不匹配

编译时候不会发现。

package ex02;

public class Main {
    public static void main(String[] args) {
        Person p1 = new Person();
        Person p2 = new Student();
//        不能直接setGrade
        ((Student)p2).setGrade(3.6);

        Student s1 = (Student) p1;
        Student s2 = (Student) p2;
        s1.setGrade(3.5);
    }
}
Exception in thread "main" java.lang.ClassCastException: class ex02.Person cannot be cast to class ex02.Student (ex02.Person and ex02.Student are in unnamed module of loader 'app')
	at ex02.Main.main(Main.java:10)

转型

为什么有转型机制呢?
可以把不同类型的对象放到一个数组里面!在这里插入图片描述
比如要做疫情管理,用学生也有老师,然后有不同的处理方法。
我们就可以实用转型去处理这个问题!
在这里插入图片描述
在这里插入图片描述

进行强制转换然后开始相应的工作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`geom_density_ridges()` 是 `ggplot2` 包中的一个几何对象,用于创建具有平滑密度曲线的峰形图。它可以用于可视化单个变量或多个变量之间的分布。该函数使用 `ggridges` 包中的 `geom_density_ridge()` 函数创建峰形图。 `geom_density_ridges()` 的语法如下: ```r geom_density_ridges(mapping = NULL, data = NULL, stat = "density", position = "identity", ... , scale = 1, rel_min_height = 0.01, alpha = NULL, fill = NA, color = NA, size = NA, linetype = NA, trim = TRUE, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) ``` 参数说明: - `mapping`:一个 aesthetics 映射列表,它描述了如何将数据变量映射到图形属性。 - `data`:要用于绘图的数据框。 - `stat`:要使用的统计变换,通常是 `density`。 - `position`:位置调整方法。默认值为 `identity`。 - `scale`:用于调整峰形图高度的比例因子。默认值为 1。 - `rel_min_height`:用于控制峰形图的最小高度。默认值为 0.01。 - `alpha`:用于控制峰形图透明度的参数。 - `fill`:用于填充峰形图的颜色。默认值为 `NA`。 - `color`:用于绘制峰形图轮廓线的颜色。默认值为 `NA`。 - `size`:用于控制峰形图轮廓线宽度的参数。默认值为 `NA`。 - `linetype`:用于绘制峰形图轮廓线类型的参数。默认值为 `NA`。 - `trim`:用于控制是否在图形边缘修剪峰形图。默认值为 `TRUE`。 - `na.rm`:用于控制是否删除缺失值。默认值为 `FALSE`。 - `show.legend`:用于控制是否显示图例。默认值为 `NA`。 - `inherit.aes`:用于确定是否继承父图层的 aes。默认值为 `TRUE`。 下面是一个示例,展示如何使用 `geom_density_ridges()` 创建一个峰形图: ```r library(ggplot2) # 创建一个数据框 set.seed(123) df <- data.frame( group = rep(c("A", "B", "C"), each = 100), value = c(rnorm(100), rnorm(100, 2), rnorm(100, 4)) ) # 创建峰形图 ggplot(df, aes(x = value, y = group, fill = group)) + geom_density_ridges(scale = 2, rel_min_height = 0.01) + scale_fill_manual(values = c("#00AFBB", "#E7B800", "#FC4E07")) + theme_ridges() ``` 运行上面的代码会生成如下的峰形图: ![geom_density_ridges](https://www.guru99.com/images/1/092118_0624_R_RidgesPlo1.png)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值