您的位置:首页 > 编程语言 > Java开发

java面向对象的封装继承多态特性

2019-02-18 16:05 801 查看

  面向对象编程有三大特性,也有说四个特性的。我这里只说传统的三大特性:继承,封装,多态。

1.继承:

  在王者荣耀中,武器是物品的一种,也是有名称和价格。在设计这个类的时候,可以让武器继承物品,从而继承名称和价格属性。

  物品类Item,有属性name,price

[code]public class Item {
String name;
int price;
}

  武器类:Weapon,不继承的写法

  独立设计name和price属性,同时多了一个属性,攻击力。

[code]public class Weapon{
String name;
int price;
int damage; //攻击力

}

  武器类:Weapon,继承的写法

  现在Weapon继承了Item,虽然Weapon自己没有设计name和price,但是通过继承Item类,也具备了name和price属性。

[code]public class Weapon extends Item{
int damage; //攻击力

public static void main(String[] args) {
Weapon infinityEdge = new Weapon();
infinityEdge.damage = 65; //damage属性在类Weapon中新设计的

infinityEdge.name = "无尽战刃";//name属性,是从Item中继承来的,就不需要重复设计了
infinityEdge.price = 2070;

}

}

2.封装:

  网上有一堆讲这个的概念的文字描述,我的理解就是保护类里面的属性和方法,防止被外部类定义的代码随机访问。还有一种理解就是面向接口编程,我定义一个抽象类(或接口),只给一个方法签名(只有修饰符(一般是public),返回值,方法名,参数),内部实现只有实现方看见,调用方只能使用这个方法。

  实现方式:

  成员变量(属性)和方法有如下的修饰符:

private 私有 本类才可以访问

package\default\不写(默认是这个)同一个包下的类可以访问

protected 受保护的 子类可以访问父类的

public 公共的 任意类都可以访问

各个修饰符有不同的访问这个成员变量(属性)或方法的权限。

[code]public class Weapon{
private String name;
private int price;
private int damage; //攻击力

public String getName(){
return this.name;
}

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

public int getPrice(){
return this.price;
}

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

public int getDamage(){
return this.danage;
}

public void setDamage(int damage){
this.damage = damage;
}
}
[code]public class Test{
public static void main(String[] args){
Weapon weapon1 = new Weapon();
weapon1.setName("无尽战刃");
weapon1.setPrice(2070);
weapon1.setDamage(60);
System.out.println("武器名:"+weapon1.getName()+" 价格:"+weapon1.getPrice()+" 伤害:"+weapon1.getDamage());
}
}

3.多态:

多态: 都是同一个类型,调用同一个方法,却能呈现不同的状态。

    父类  Item物品

[code]package property;

public class Item {
String name;
int price;

public void buy(){
System.out.println("购买");
}
public void effect() {
System.out.println("物品使用后,可以有效果 ");
}

public static void main(String[] args) {
Item i1= new LifePotion();
Item i2 = new MagicPotion();
System.out.print("i1  是Item类型,执行effect打印:");
i1.effect();
System.out.print("i2也是Item类型,执行effect打印:");
i2.effect();
}

}

    子类1  LifePotion血瓶

[code]package property;

public class LifePotion extends Item {
public void effect(){
System.out.println("血瓶使用后,可以回血");
}
}

    子类2 MagicPotion蓝瓶

[code]package property;

public class MagicPotion extends Item{

public void effect(){
System.out.println("蓝瓶使用后,可以回魔法");
}
}

Item父类的主方法打印出来之后,同一个引用类型Item的变量t1,t2调用方法打印的内容不一样(一个回血,一个回蓝)。

同一个接口,使用不同的实例而执行不同操作。

多态存在的三个必要条件

    继承
    重写
    父类引用指向子类对象

最后,文章千千万,刚开始学习的概念总是那么的抽象难以记得,任何一门知识都是如此,只有自己不断地实践,学习和理解,才能消化这些知识,祝愿每一位努力的人都如尝所愿,有所造诣。

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐