JavaSE复习之二 基础知识:面向对象

原文地址:JavaSE复习之二 基础知识:面向对象


面向对象

一、一切皆对象
        Java中除了基本数据类型之外的都是对象,可称为一切皆对象。对象具有状态,用属性来描述或表达其状态;对象具有行为,
用方法来描述对象的行为。而这些属性和行为就代表了对象所具有的独一无二的特征。

        面向对象技术基于对象概念,以对象为中心,以类和继承为构造机制,充分利用接口和多态提供灵活性,来认识、理解、刻画
客观世界和设计、构建相应的软件系统。
        面向对象的方式由面向对象分析(OOA)、面向对象设计(OOD)和面向对象编程(OOP)三部分组成。



二、对象的三特征

1 封装(Encapsulation)
        将对象的实现细节隐藏起来(属性、方法不对外公开),通过一些公共方法来暴露该对象的功能。
  1. public class Person {     
  2.     private int age;  // 私有属性  
  3.     private String name;  
  4.       
  5.     public Person(){ }  // 默认构造  
  6.     public Person(String name,int age){  // 构造  
  7.         this.setName(name);  
  8.                 this.setAge(age);  
  9.     }  
  10.   
  11.     public String getName(){ return name; }    // 私有属性对外提供的访问方法  
  12.     public void setName(String name){ this.name = name; }  
  13.     public int getage(){ return age; }  
  14.     public void setAge(int age){ this.age = age;}  
  15. }  
  16.   
  17.  public class Student extends Person{  
  18.       
  19.     private int id;  
  20.     public Student(){}  
  21.     public Student(int id,String name,int age){  
  22.         super(name,age);  //  
  23.         this.setId(id);  
  24.     }  
  25.       
  26.     public int getId(){ return(id); }  
  27.     public void setId(int id){ this.id = id; }  
  28. }  
public class Person {	
	private int age;  // 私有属性
	private String name;
	
	public Person(){ }  // 默认构造
	public Person(String name,int age){  // 构造
		this.setName(name);
                this.setAge(age);
	}

	public String getName(){ return name; }    // 私有属性对外提供的访问方法
	public void setName(String name){ this.name = name; }
	public int getage(){ return age; }
	public void setAge(int age){ this.age = age;}
}

 public class Student extends Person{
    
    private int id;
    public Student(){}
    public Student(int id,String name,int age){
        super(name,age);  //
        this.setId(id);
    }
    
    public int getId(){ return(id); }
    public void setId(int id){ this.id = id; }
}
封装的特征:
        封装将实例变量标记为私有:private;
        提供public的get和set方法来控制存取动作;
        封装隐藏了类的细节,封装后的代码更具有安全性、可扩展性和可维护性;




2 继承(Inheritance)
        继承是复用类的方法。当子类继承父类后,子类作为一种特殊的父类,将直接获得父类的属性和方法,且子类可能拥有比父类
更多的属性和方法。

继承的特征:
        把一些类的共性抽取出来,放到一个类中,那么这个类就是这些具有共性类的父类,或者说这些子类继承自父类;
        继承意味着子类继承了父类的成员,包括实例变量和方法;
        继承分为单继承和多继承,Java被设计为单继承;



3 多态(Polymorphism)
        一个对象,多种形态。子类对象可直接赋给父类对象的引用,或者说把子类对象当作父类对象使用。多态性的意义在于,类的
对象能以各自不同的方式响应同一消息,即“同一接口,多种方式”。多态性使得程序发出一个消息后,不同的消息接受者执行不同
的响应。


多态的特征:
        引用与对象可以是不同的类型;
        引用类型可以是实际对象类型的父类;
        参数和返回类型可以是多态;
       
       
对象多态的核心问题:
1.若把子类对象当做父类对象,那么就只能访问父类中已有定义的属性和方法。问题是到底能访问什么呢?
  1. Fruit fru = new Orange();  
Fruit fru = new Orange();
a. 能访问成员变量(包括静态变量和实例变量)。
    成员变量与引用变量所声明的类型的成员变量绑定(静态绑定/编译期绑定)。
b. 实例方法与引用变量实际引用的对象的方法绑定(动态绑定/运行期绑定)。
    实例方法与实际引用f指向的对象orange的方法绑定。
c. 静态方法与引用变量所声明的类型的方法绑定(静态绑定/编译期绑定)。
    静态方法与fruit类型的方法绑定。

2.若子类把父类的方法覆盖,再把子类对象当作父类对象来看,去调用该方法,调用的是覆盖后的方法(子类中定义的方法)。
    访问的是什么呢?
        实例方法与引用变量实际引用的对象的方法绑定(动态绑定)。
        Fruit有eat()方法,若子类Orange不覆盖(重写)eat()方法,则该对象在调用此方法时fru.eat(),先在子类里找eat(),找不到就
调用Fruit的eat()方法。若子类重写(覆盖)该方法,则调用重写后的方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值