[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);
}
}
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);
}
}