#java 一个简单的例子理解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();
    }
}
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值