黑马程序员_面向对象的三大特征

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

封装即对要操作的实体进行隐藏,使原始功能对外不可见,通过其他方法间接的操作真实的实体。
日常生活中的各种电器的遥控器、银行的密码锁、指纹识别系统等均为封装的体现。
 
封装的标准实现:
class Person{
  private String name;
  public void setName(String name){
    this.name = name;
  }
  public String getName(){
    return this.name;
  }
}
 

 
2.面向对象的三大特征之二:继承

继承描述的是一种类间关系
通过继承可以减少模型内部结构的重复描述,加强代码的复用性

父类/超类/基类:类B继承类A,称类A为父类
子类:类B继承类A,称类A为子类
顶层父类:Object

语法结构:
 class 子类名称 extends 父类名称{
 }


子类可以继承父类所有的成员变量、成员方法。也可以对父类中已有的成员变量和成员方法进行重定义。另外,子类可以添加父类没有的成员。


重写:
子类对父类中已有的实例方法进行重新定义,称子类对父类的指定方法进行重写
重写只发生在继承关系中,重写描述的是子类方法对父类方法的关系
重写时子类重写的方法访问控制权限必须大于父类的访问控制权限

误区:
静态方法的覆盖称为子类隐藏了父类的静态方法,而不是重写了父类方法
父类的私有方法,子类是无法继承的,因此父类私有方法不能被重写
实例方法在重写时不能添加static修饰符,静态方法被重新定义时不能定义为非静态的方法

重写的应用
当一个类开发完成,后期维护过程中,发现其功能已经过时,需要对其进行维护,添加一些新的功能,但是旧的功能如果被修改,可能导致其他功能连带失效,为了避免该现象,在不惊动原始功能的基础上,对其进行功能的扩展,即可以利用重写的特点进行,这一方式即设计模式中的装饰模式的雏形。

 

super
子类对父类的某些实例方法进行覆盖后,在子类中将无法直接调用父类被覆盖的方法,可以通过super关键字,对父类的成员进行引用
 super.父类成员变量
 super.父类成员方法
super():会访问父类中空参数的构造函数。而且子类中所有的构造函数默认第一行都是super();


instanceof
子类继承自父类,子类将具有父类的形态,可以说子类也是父类的对象,可以使用关键字instanceof来判定某个对象是不是某种类类型


 

3.abstract  抽象类

抽象类:可以包含不确定成员的类

 

语法结构:
abstract  class 类名{
}

 

抽象类的特点:
1,抽象类中的不确定成员指抽象方法,抽象类中可以包含抽象方法,但不是必须包含抽象方法,一个类一旦包含了抽象方法,则必须将该类声明为抽象类。
2,抽象方法和抽象类都必须被abstract关键字修饰。
3,抽象类不可以用new创建对象。因为调用抽象方法没意义。
4,抽象类中的抽象方法要被使用,必须由子类复写起所有的抽象方法后,建立子类对象调用。如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。

 


4. interface  接口

 

接口是Java中的一种特殊结构
接口为类的制作进行了严格的限定,制作接口仅仅是为类的定义建立一种统一的标准,当某个类需要进行严格的格式限定时,可以为该类指定满足何种规范,接口在这里充当了规范的作用


语法结构:
[访问控制修饰符] interface  接口名{
 变量声明
 方法声明
}

 

 

接口中的变量都是公共的静态的常量,并且要求对其进行初始化
接口中的变量默认修饰符
 public static final 接口常量名 = 值;

 

 

接口中的方法都是公共的抽象方法,接口中的方法没有方法体,仅在接口所对应的规则间建立一种通用的操作定义
接口中的方法默认修饰符
 public abstract 返回值类型 方法名(参数列表);

 

 

接口的修饰符
 public:公共接口,可以被任意访问
 默认:  只能在包内访问

 

 

接口的使用语法结构implements
 class 类名 implements 接口名{
 }
 class 类名 implements 接口名1,接口名2{
 }
以上过程称为类实现了某个接口

 

 

使用规则
一旦类在制作过程中实现了某个接口,就要对该接口中所有的抽象方法进行实现
如果一个类未对所实现的接口中的方法进行全部实现,必须将该类声明为抽象类,毕竟该类的描述没有完全定义

 

每个接口定义了一种标准规范,当开发过程中如果频繁需要同时使用多个接口来限定一个类的制作,可以将多个接口进行合并
interface  总接口名  extends 子接口1,子接口2,…{
}


 

 

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

 

多态:可以理解为事物存在的多种体现形态。

 

人:男人,女人
动物:猫,狗...
我:(学校里)学生,(商场里)顾客...

 

1,多态的体现
父类的引用指向了自己的子类对象。
父类的引用也可以接收自己的子类对象。

 

2,多态的前提
必须是类与类之间有关系。要么继承,要么实现。
通常还有一个前提:存在覆盖。

 

3,多态的好处
多态的出现大大的提高程序的扩展性。

 

4,多态的弊端:
虽然提高了扩展性,但是只能使用父类的引用访问父类中的成员。

 

5,在多态中成员变量和成员方法的特点:
1>非静态成员变量
    |-- 编译时期,参考引用型变量所属类中,有没有定义成员变量
       |-- 有编译通过,没有编译失败
     |-- 运行时期,参考引用型变量所属类中的成员变量

 

2>静态成员变量
    |-- 编译时期,参考引用型变量所属类中,有没有定义静态成员变量
       |-- 有编译通过,没有编译失败
    |-- 运行时期,参考引用型变量所属类中的静态成员变量

 

3>非静态成员方法
    |-- 编译时期,参考引用型变量所属类中,有没有定义这个成员方法
      |-- 有编译通过,没有编译失败
    |-- 运行时期,参考子类重写父类中的这个成员方法,如果子类没有重写,运行父类的

 

4>静态成员方法
    |-- 编译时期,参考引用型变量所属类中,有没有定义这个静态成员方法
      |-- 有编译通过,没有编译失败
    |-- 运行时期,参考引用型变量属于类中定义的这个静态成员方法

 

简单的记: 
Fu  f = new Zi();
除了非静态成员方法,编译看左边,运行看左边
只有非静态成员方法,编译看左边,运行看右边


 

posted @ 2013-09-01 15:51  夏夜猫  阅读(170)  评论(0编辑  收藏  举报