java 面向对象:继承

本文解析了继承概念,重点讨论了子类如何访问父类的public、缺省、private、protected属性和方法,以及自动转型在不同包下的行为。通过实例演示了如何在大学生类中扩展学生类,以及在代码中如何正确运用这些概念。
摘要由CSDN通过智能技术生成

概念解析:

类别

  • 例如:大学生类在学生类中,这两个类之间存在继承关系
    - 其中学生类是大学生类的父类
    - 大学生类是学生类的子类
    - 子类能够继承父类的所有东西
    ** 继承的关键字**:extends
    格式
public 子类名 extends 父类名{

}   

子类及子类对象可以调用继承到的哪些属性和方法呢?:

public ------ 公共的
不写 ------ 缺省的
private------ 私有的
protected ------- 保护的

  • public指src中自己所有写的代码都放在src中
  • 缺省的指package给类文件进行分类储存
  • private指类{ }中私有的东西
  • protected指当前类文件中的代码文件

public、缺省、private、 protected都有访问权限修饰符的限定范围

  • public在整个项目中都有
  • 缺省的同包下都有
  • private只在整个类的{ }中存在
  • protected在同包下以及不同包下的子类中都存在

子类及子类对象可以调用继承到的属性和方法有:

同包下中:

  • 子类中以及非子类中的子类对象,只有private修饰的不可以被调用;

不同包下:

  • 在子类{ }中,子类与父类不同包时,子类中私有的以及缺省的不可以被调用
  • 非子类中:子类对象只能够调用public修饰的。

子类在父类的基础上扩展时是抽象的,类相对于对象来说也是抽象的:

  • 1.子类继承了父类的属性和方法之后,也能够增加自己的属性和方法。
  • 2:子类中可以重写父类的方法,并改造方法体的内容。

举一个例子
动物类:吃:食物,就会有吃肉食和吃素食的。

格式:一般情况下除了方法体之外都要与父类一致
访问权限修饰符返回值类型方法名都要一致。

自动转型:

转型分为自动转型强制转型

  • 强制转型是不安全的
  • 自动转型时安全的。

-子类对象可以自动转型为父类类型

A a =new A();
A a =new B();

要使A a=new B()成立,首先A得是B的父类

自动转型后:

  • 子类对象自动转型之后是不能调用子类独有的属性和方法的。
  • 子类对象自动转型之后会优先调用重写的方法。
  • 子类对象转型为父类类型是自动转型是安全的
  • 父类类型变量名转为子类类型是强制转型是不安全的,需要检查一下原本的类型是什么。

Code:

-首先创建一个类名,写下其属性 public、int、private、protected,其中adr是私有的不能够直接被调用,需要设置Adr的方法使得子类对象能够得到Adr,学生类和大学生类共有的是成绩exam,打印输出,返回

public class Student {
    public String name;
    private String adr;
    int age;
    protected int id;

    public void setAdr(String adr) {
        this.adr = adr;
    }

    public String getAdr() {
        return adr;
    }
    public String exam(int age){
        System.out.println("父类的考试方法");
        return name;

    }
}

-在创建一个类名继承extends Student,写下属性 cet4,大学生需要考四级证书,输入打印输出的方法,在{ }中分别打印输出

public class UNstudent extends Student{
    int cet4;
    public void printInfo() {
        System.out.println("name:"+name);
        System.out.println("age:"+age);
        System.out.println("adr:"+getAdr());
        System.out.println("id:"+id);
    }

-在共有的成绩exam中,打印输出子类重写父类考试的方法,返回

public String exam(int age) {
        System.out.println("子类大学生类重写方法");
        return name;
    }
  
}

-再创建一个类名,主方法中创建一个子类对象,子类对象依次分别调用name、id、age、adr。private是私有的不能够被直接调用,子类对象需要调用设置的Adr,使得adr等于子类对象调用得到的Adr,打印输出
-子类的对象调用exam赋值为20,申明的父类对象等于子类对象,申明的父类对象调用exam的赋值,以此类推

public class Manage {
    public static void main(String[] args){
        UNstudent unstu=new UNstudent();
        unstu.name="QQ";
        unstu.age=20;
        unstu.id=01;
        unstu.setAdr("Adr");
        String adr=unstu.getAdr();
        System.out.println("adr:"+adr);
        unstu.printInfo();
        unstu.exam(20);
        Student stu1=unstu;
        stu1.exam(20);
        UNstudent unstu2=(UNstudent) stu1;
        unstu2.exam(20);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值