类与继承的总结

[size=medium][size=large][size=medium]1.为什么需要使用继承?[/size][/size][/size]

java是面向对象的编程语言,是类构成了java语言,而继承又是java必不可少的,继承就是当你写一个类时,虽然这个类满足了某些功能但是你又想拓展它的功能,此时你就可以使用继承机制在写一个该类的子类,来完成你需要的功能,一旦子类继承了父类就拥有了父类的方法与域(除私有方法和私有域),在子类中也可以重写父类的方法,覆盖父类中同名的方法,定义与父类相同的域,隐藏父类同名的域,实现子类需要的功能。继承的优点是提高搜索了代码的效率,避免了代码重写。


[size=medium]2.Java的关键字与格式[/size]

Java的关键字 extends
格式:
Public class xx(子类,派生类,超类) extends 类名(父类名,基类名){

}


[b]注意: Java中的类的继承是单继承[/b]
场景: 冰箱类---->家用小冰箱类

This.color (属性)= color(参数);
//就近原则

[size=medium]3.子类继承到了父类的哪些方法和属性?[/size]

子类能集成到所有的父类的属性和方法。


能调用的属性和方法有哪些?
[b]
类中 同包中 有继承关系不同包中 不同包

Public 可以 可以 可以 可以
Protected 可以 可以 可以 不可以
默认的 可以 可以 不可以 不可以
Private 可以 不可以 不可以 不可以[/b]

构造方法;子类父类
Super( , , , , );


[size=medium]4.方法重写[/size]

方法重写:父类有此方法,子类也有此方法,但是他们的具体实现不同:
1. 访问修饰符,返回值类型,方法名,参数个数类型顺序都必须要相同;
2. 但是他们的具体实现(中间的代码)是不同的。

什么情况下用方法重写? 注意:Java中小数默认double类型,后加f表示float型

根据你实例化的对象来决定要调用的方法。


下面 是我的关于对象的继承的小练习--就是实现用冰箱类的对象来存放不同食物类对象的小程序。

在下面运用到了类的继承,包括(Freezing)方法的重写和Food类的自动转型。

自动转型:
先有继承,才会有重写和自动转型,如电脑中short类型变为int类型,就是自动转型,但反过来则不行,必须得强制转型。继承以后,子类对象会自动转变为父类对象,如果子类重写了父类中的方法,调用的是子类的方法,否则就是父类中的方法。例如:
Food meat1 = new Meat();
此时,此时的meat1是Food类型的
自动转型的好处:减少代码数量的编写;因为食物有很多种,如果每种食物都要为其写具体的实现方法的话会很繁琐(天知道事物要分为多少种),我们可以直接调用其父类实现方法,然后再新加的食物类的子类中再重写它的具体实现方法,可大大减少工作量,而且代码也会变得很简洁。


这些我们可以从Test类和下面的运行结果中看到:

[img]http://dl2.iteye.com/upload/attachment/0101/4952/c2e998a9-2980-3a7e-a7ff-400fbe4121d3.png[/img]


[code="java"][/code]
/*
*冰箱类,包括家用小冰箱,冷库等各种冰箱。
*/

public class Icebox {
//属性
private int size; //大小
public String color;//颜色
protected float price;//价格

String brand; //品牌
String type; //类型

//构造方法
public Icebox(int size, String color, float price, String brand){
this.size = size;
this.color = color;
this.price = price;
this.brand = brand;
}

//属性设置和获取的方法
//冰箱大小属性的设置和获取
public int getSize(){

return size;
}

public void setSize(int size){
this.size = size;
}

//冰箱颜色属性的设置和获取
public String getColor(){

return color;
}

public void setColor(String color){
this.color = color;
}

//冰箱价格属性的设置和获取
public float getPrice(){

return price;
}

public void setPrice(float price){
this.price = price;
}

//冰箱品牌属性的设置和获取
public String getBrand(){

return brand;
}

public void setBrand(String brand){
this.brand = brand;
}

//冰箱的使用方法
public void Freezing(Food food){

System.out.println("把"+food.getName()+"放 入"+brand+"内冷藏起来");
}
}


/*
*家用小冰箱 Xiaoicebox类,继承自Icebox类。
*/

public class Xiaoicebox extends Icebox {

public String type;
//private Object food;
//构造方法
public Xiaoicebox(int size,String color,float price,String brand){
super(size, color, price, brand);//调用父类的构造方法
}

public String getType(){

return type;
}

public void setType(String type){
this.type = type;
}

//实例化一个Food对象
//Food food = new Food();

//重写父类的Freezing方法
public void Freezing(Food food){
System.out.println("把"+food.getName()+"放入小明家的"+brand+type+"冰箱内冷藏起来");
}
}


/*
*Food类,包括Meat,蔬菜,水果等各种食物。
*/
public class Food {


//属性
public String name;


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

public String getName(){

return name;
}

}


/*
*Meat类,继承自Food类,可以放在家用小冰箱里。
*/
//其属性和方法可以继承父类所有的属性和方法
public class Meat extends Food{

}


/*
*Test类,把食物类对象放进具体冰箱类对象中的实现类。
*/
public class Test{

public static void main(String[] args){

//meat对象来自于子类Meat类
Meat meat = new Meat();
meat.setName("肉松饼");

//meat1对象来自于父类Food类,自动转型为Meat类
Food meat1 = new Meat();
meat1.setName("蜜汁牛肉");

//meat2对象来自于父类Food类
Food meat2 = new Food();
meat2.setName("一盒酥");

//meat3对象来自于父类Food类
Food meat3 = new Food();
meat3.setName("小苹果");


//box对象来自于子类Xiaoicebox类
Xiaoicebox box = new Xiaoicebox(1,"white",0.0f,"海尔");
box.setType("初号神");

Icebox box1 = new Xiaoicebox(1,"white",0.0f,"海尔");
Xiaoicebox box3 = (Xiaoicebox)box1;//将父类类型的对象强制转换成子类类型的对象
box3.setType("二号");

//box1对象来自于子类Icebox类
Icebox box2 = new Icebox(1,"white",0.0f,"海尔");
//box2.setType("三号");

//分别将不同的食物存入不同的冰箱对象
box.Freezing(meat2);
box3.Freezing(meat1);
box2.Freezing(meat);
box.Freezing(meat3);

}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值