董老师在硅谷 2018-03-14
2018-03-14
一、引用的概念,如果一个变量的类型是 类类型,而非基本类型,那么该变量又叫做引用。
1、引用和指向:
new Hero();
代表创建了一个Hero对象
但是也仅仅是创建了一个对象,没有办法访问它
为了访问这个对象,会使用引用来代表这个对象
Hero h = new Hero();
h这个变量是Hero类型,又叫做引用
=的意思指的h这个引用代表右侧创建的对象
“代表” 在面向对象里,又叫做“指向”
public class Hero { String name; //姓名 float hp; //血量 float armor; //护甲 int moveSpeed; //移动速度 public static void main(String[] args) { //创建一个对象 new Hero(); //使用一个引用来指向这个对象 Hero h = new Hero(); } }
2、多个引用,一个对象:
引用有多个,但是对象只有一个。
在这个例子里,所有引用都指向了同一个对象。
对象就像 "房产", 引用就像"房产证"
房产证的复印件可以有多张,但是真正的"房产" 只有这么一处
public class Hero { String name; //姓名 float hp; //血量 float armor; //护甲 int moveSpeed; //移动速度 public static void main(String[] args) { //使用一个引用来指向这个对象 Hero h1 = new Hero(); Hero h2 = h1; //h2指向h1所指向的对象 Hero h3 = h1; Hero h4 = h1; Hero h5 = h4; //h1,h2,h3,h4,h5 五个引用,都指向同一个对象 } }
3、一个引用,多个对象:
第8行,引用garen指向新创建的对象(对象1)
第9行,同一个引用garen指向新创建的对象(对象2)
这个时候,对象1,就没有任何引用指向了
换句话说,就没有任何手段控制和访问该对象,那么该对象就变得没有意义。
二、在LOL中,武器是物品的一种,也是有名称和价格的,所以在设计类的时候,可以让武器继承物品,从而继承名称和价格属性。
1、物品类Item 有属性 name,price
public class Item { String name; int price; }
2、武器类: Weapon不继承Item的写法
独立设计 name和price属性,同时多了一个属性 damage 攻击力
public class Weapon{ String name; int price; int damage; //攻击力 }
3、这一次Weapon继承Item
虽然Weapon自己没有设计name和price,但是通过继承Item类,也具备了name和price属性
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 = 3600; } }
package charactor; public class Hero { public String name; protected float hp; public static void main(String[] args) { Hero garen = new Hero(); garen = new Hero(); } }
class Singleton: def __new__: # 关键在于这,每一次实例化的时候,我们都只会返回这同一个instance对象 if not hasattr: cls.instance =