1、第七章 封装、继承、多态封装的概念什么是封装在程序上,隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类” ,其中数据和函数都是类的成员。封装的好处提高一个物体内部组成部分的安全性可以向外部屏蔽一个物体内部组成部分的差异public class TestEncapsulation1()public static void main(String agrs)CreditCard card = new CreditCard();System.out.pri
2、ntln(card.password);class CreditCardString password = “123456”;double money = 100.0;封装的三要素保护实例变量 private建立 public 的访问器方法( getter 读取器/setter 设置器)对于方法使用 JavaBean 命名规范getsetgetPassword();setPassword();现实中给你一张信用卡,但实际我们拿到的只是一张卡片,不会看到密码。属性封装方法根据需要封装方法声明公开,方法实现封装doubleValue(2);public static int doubleValue
3、(int value)/return value*2;return value2;继承类与类之间的关系“HAS-A” 关系“IS-A” 关系USED-A 关系什么是继承将类的共性进行抽象形成的类(父类、超类)提高代码的复用性extends 关键字Dog d = new Dog();d.eat();d.sleep();System.out.println(d.age);JAVA 中继承的特点java 中的继承是单继承java 中单继承的好处简单、AnimalCat Dogextendsextends继承关系在内存中的表现形式Dog 类 extends Animal 类new Dog();分配空间
4、(父类对象空间,子类对象空间)递归的构造父类对象初始化属性调用构造方法java 中的访问修饰符什么是 java 中的访问修饰符public /不论包内、包外、或继承都可以访问private /只能在自己类的范围内被访问。protected /在同一个包里的可以访问( =default) ,在包外的子类可以基于继承访问default /不能被包外的类访问两个不同的访问问题一个类中的方法代码是否能够访问另一个类的成员 /能一个子类是否能够继承其父类的成员java 作用域 public,private,protected 及不写时的区别 在说明这四个关键字之前,我想就 class 之间的关系做一个简
5、单的定义:对于继承自己的 class,base class 可以认为他们都是自己的子女,而对于和自己一个目录下的 classes,认为都是自己的朋友。1、public:对所有用户开放,所有用户都可直接调用2、private:私有。除了 class 自己之外,任何人都不可直接使用,私有财产神圣不可侵犯嘛,即便是子女,朋友,都不可使用。3、protected:对于子女、朋友来说,就是 public 的,可自由使用,无任何限制;而对于其他的外部 class,protected 就变成 private。(同一个包中的类,若不在同一个包中,必须为其子孙类才可使用)4、默认:默认可以称为 friendly
6、,但是 java 语言中是没有 friendly 这个修饰符的,这样称呼应该是来源于 c+。默认的访问权限是包级访问权限。补充说明:1.每个编译单元(类文件)都仅能有一个 public class 2.public class 的名称(包含大小写)必须和其类文件同名。 3.一个类文件(*.java)中可以不存在 public class。 如果我们在某个包内撰写一个 class,仅仅是为了配合同一包内的其他类工作,并且我们不想再为了撰写说明文档给客户(不一定是现实意义的客户,可能是调 用这个类的类)看而伤脑筋;或者有可能过一段时间之后会彻底改变原有的做法,并以全新的版本代替旧版本,这种情况下一
7、般会默认。4、class 不可以是 private 和 protected。子类的扩展方法的覆盖子类覆盖方法的访问修饰符范围必须大于或者等于父类对应方法的访问修饰符范围super 关键字每一个子类的构造方法在没有显示调用 super()系统都会提供一个默认的 super()super() 书写在第一行可以在子类构造方法中显示调用 super(),完成对特定父类构造方法的调用多态什么是多态Dog d = new Dog();Animal a = new Dog(); /一个客观存在的 Dog 对象看做一个 Animal(父类) 。通过父类型的引用指向子类型的对象多态的特点对象类型不可变,引用类型
8、可变只能调用引用其引用类型中定义的方法/ Animal a = new Dog(); a 只能调用 Animal 中定义的方法,不能调用 Dog 中的方法运行时会运行子类覆盖的方法强制类型转换Animal a = new Dog();Dog d = a; /错误dog d = (Dog)a; /正确java.lang.ClassCastException /强制类型转换异常instanceof 运算符它的作用是测试它左边的对象是否是它右边的类的实例,返回 boolean 类型的数据if(a instanceof Dog)Dog d = (Dog)a;多态的作用提高代码的通用性Dog d = new Dog();d.sleep();d.eat();Animal a = new Dog();a.sleep();a.eat();Animal a = new Animal2;a0 = new Dog();a1 = new Cat();long length = a.length;for(int i = 0;ilength;i+)ai.eat();