学习面向对象的三条主线之二 面向对象的三大特征

1. 面向对象的三特征之一: 封装

使用者对类内部定义的属性(对象的成员变量)的直接操作会导致数据的错误、混乱或安全性问题.封装的好处:隐藏实现的细节、更安全、更容易维护.

 

2. 面向对象思想"落地"法则(二)

Java中通过将数据声明为私有的(private),再提供公共的(public)方法:getXxx()和setXxx()实现对该属性的操作,以实现下述目的:

  • 隐藏一个类中不需要对外提供的实现细节;
  • 使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作;
  • 便于修改,增强代码的可维护性.

3. Java的访问控制权限

Java权限修饰符public/protected/private置于类的成员定义前,用来限定对象对该类成员的访问权限.

 

  • 对于class的权限修饰只可以用public和default(缺省);
  • Public: 无论是包内还是包外,均可任意访问;
  • protected:包内均可以访问,包外仅限于子类;
  • 默认:权限仅限于包内;
  • private:仅限于同一个类,连子类都不能访问,更别谈是同包中的其他类.

 

4.  面向对象的三特征之二: 继承性

继承的思想: 多个类中存在相同的属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只需要继承那个类即可.

 

规则:

(1) 子类继承了父类,就继承了父类的方法和属性;
(2) 在子类中,可以使用父类中定义的方法和属性,也可以创建新的数据和方法;
(3) 子类不能直接访问父类中私有的(private)的成员变量和方法;
(4) Java只支持单继承,不允许多重继承.

 

继承要注意的几点:
(1) 属性不可重写,属性可以覆盖。就是子类的属性可以重新赋值,覆盖父类的值;
(2) 属性没有多态性,属性值取决于引用类型。如果B是A的子类,那么A a = new B()属性的值取决于A类;
(3) 方法可以重写,方法有多态性;
(4) 方法的行为取决于对象而不取决于引用类型。也就是说,如果B是A的子类,那么A a = new B(); 方法的值取决于B类;
(5) 生成子类对象必须调用父类构造方法,子类构造方法必须和父类构造方法匹配.

 

5. 面向对象的三大特征之三: 多态

所谓多态就是指同一种行为在不同的对象上有不同的表现形式. 在java中有两种体现:

(1) 方法的重载(overload)和重写(overwrite)。
(2) 对象的多态性 :父类的引用指向子类对象实体
可以直接应用在抽象类和接口上

 

多态思想的应用实例:

JDBC

 

6. 关键词

(1) 匿名对象

匿名对象就是没有别名的对象,比如 new Person("张三",20).

 

(2) String类

String类属于引用数据类型,不属于基本数据类型。每创建的一个String字符串都是一个对象。

 

有静态初始化和动态初始化两种方式,它们存储的区域不同.


静态初始化,是存储在字符串常量池:
String s1 = "Hello,China!";
如果使用静态初始化方式再重新创建一个内容一模一样的String对象,String s3="Hello,China",那么会先在字符串常量池中查找是否有相同的内容,如果有那么s3就指向刚才创建的s1的内容。因此他们是同一个对象。

 

动态初始化是存储在堆内存中:
String s2 = new String("Hello,China!");
如果使用动态初始化方式再创建一个内容一模一样的String对象,String s4="Hello,China",不会去查找堆内存是否有相同,只会在新的堆内存中重新划分一块区域去存储新的对象。因此他们是不同的对象。

 

(3) 常用的String类型

charAt(int index)//返回指定下标的字符
compareTo(String s)//字符串比较
contact(String s)//字符串拼接
contain()//包含字符串
equals()//判断两个字符串内容是否相同
getBytes()//返回字节数组
indexOf()//查找字串下标

lastIndexOf()//查找最后字串下标
split()//分隔字符串返回字符串数组
subString()//获取字串
toString()//对象转换为字符串
toUpperCase()//转换为大写字母
toLowerCase()//转换为小写字母

 

(4) 引用传递

引用传递的本质是传值. 通过引用传递可以改变实参对象的内容,但不能改变实参对象本身. 也就是说可以使用静态复制的方法改变对象的内容,但是不能通过new一个新对象去改变原实参.

 

(5) 方法重写与方法重载

方法重写:Override/Overwrite,子类重写了从父类继承过来的方法.

方法重载:Overload,方法的名字相同,参数的个数、类型、次序不同.

相同点:都是多态性的表现,方法重写属于一种动态的多态性。方法重载属于静态多态性.

不同点:方法重写有继承,方法重载无继承.

posted @ 2017-03-18 14:03  fengze  阅读(373)  评论(0编辑  收藏  举报