一个简单的例子理解java继承、成员函数重写、类型转换

一个简单的例子理解java继承、成员函数重写、类型转换

1、继承简介
举一个简单的例子:笔分为很多种,比如毛笔、钢笔、圆珠笔等等,这些笔都有一些相同的属性比如长度、笔迹的粗细等等;但他们也有不同的特点,比如他们的用途(毛笔可以写对联、钢笔可以写作业等等)等。这时候要编写一个程序用类表示这些笔,一般的方法就必须把各种笔的众多相同的属性重复写很多次,就很浪费时间。这时候就可以借助继承,先写一个拥有所有笔共同点的类,再分别写每一种笔的类,让其继承这个共同类即可。

先写一个笔的类:

public class pen {
    //定义长度
    private int length;
    //定义品牌
    private String brand;
    //定义笔迹的粗细
    private int width;
    public void setLength(int l){
        length = l;
    }
    public int getLength(){
        return length;
    }
    public void setBrand(String b){
        brand = b;
    }
    public String getBrand(){
        return brand;
    }
    public void setWidth(int w){
        width = w;
    }
    public int getWidth(){
        return width;
}
public void write(){
        System.out.println("写了一个字");
} 
}

这时候写毛笔的类的时候,对于笔的共同属性就只需要先用extends关键字继承,再写其特有的属性和方法即可。(继承的格式class 子类/派生类 extends 父类/基类/超类 ,基类/父类/超类 就是拥有共同属性和方法的类, 子类/派生类则是从父类继承过来,拥有它自己特有的属性和方法的类。)

public class inkBrush extends pen{
    public void writeCouplet(){
        System.out.println("写了一副对联");
    }
}

同样,钢笔类也只需先继承再写钢笔独有的属性和方法。

public class pencil extends pen{
    public void doHomework(){
        System.out.println("完成了一次作业。");
    }
}

2、关于类类里面可以被继承的部分
Java里面的子类可以继承父类的所有属性和方法,只不过不能直接访问私有成员,默认的成员不能跨包继承。

3、关于方法的重写
不同的笔都可以写字,但不同的笔写出的子是不一样的。这时候就需要在各种笔的子类里重写write方法,如下所示:

public class pencil extends pen{
    public void write(){
        System.out.println("用钢笔写了一个字");
    }
}

子类里重写的方法必须和父类里的方法的关键字、方法名、方法里的参数个数以及每一个参数的属性都必须相同。不然就成了方法的重载。

3、关于类的类型转换
每种笔都可以用来写字。当一个学生用钢笔写字的时候,我们可以说“他在用钢笔写字”,也可以说“他在用笔写字“。用类表示如下:
写一个学生类:

public class student {
    public void write(pen p){
        p.write();
    }
}

主函数里面:

public class Manage {
    public static void main(String [] args){
        student stu1 = new student();
        pencil p1 = new pencil();
        stu1.write(p1);     
    }
}

学生类的doHomework方法里的参数是pen的类型,主函数里student对象stu1的doHomework方法里的参数是pencil,但并没有报错。这说明pencil自动转换为了pen对象。
自动类型转换只能从子类转换为父类,不能从父类转换为子类,从父类转换为子类必须使用强制类型抓换。

一个学生在写作业的时候,我们可以说“他用钢笔写作业”,也可以不用说明他用什么笔写作业,直接说“他用笔写作业”。用类表示如下:

写一个学生类:

public class student {
    public void doHomework(pen p){
        p.doHomework();
    }
}

如果按照上述写法会报错,这是因为pen这个类没有doHomework的方法,doHomework时pen的派生类pencil里的方法。着也说明pen类的对象无法转换成pencil类对象。这时候可以采用强制类型转换(强制类型转换的格式: 转换前的类名 转换前的对象名 = (转换后的类名)需转换的对象名)。如下所示:

public class student {
    public void doHomework(pencil p){
        p.doHomework();
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_41475710/article/details/81782962