浅谈java面向对象的理解

浅谈java面向对象的理解

一、描述
       把数据及对数据的操作方法放在一起,作为一个相互依存的整体——对象。对同类对象抽象出其共性,形成类。类中的大多数数据,只能用本类的方法进行处理。类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通信。程序流程由用户在使用中决定。对象即为人对各种具体物体抽象后的一个概念,人们每天都要接触各种各样的对象,如手机就是一个对象。

二、面向对象与面向过程(也叫结构化编程)的区别

项目名称	        				面向对象																面向过程
				
				面向对象顾名思义就是把现实中的事务都抽象成为					面向过程是“自上而下”的设计语言,先定好框架,再增砖添瓦。
定义			程序设计中的“对象”,其基本思想是一切皆对象,					通俗点,就是先定好main()函数,然后再逐步实现mian()函数中
				是一种“自下而上”的设计语言,先设计组件,再完成拼装。			所要用到的其他方法。
							
特点						封装、继承、多态														  算法+数据结构

优势				适用于大型复杂系统,方便复用、  											适用于简单系统,容易理解

劣势 			比较抽象、性能比面向过程低 									难以应对复杂系统,难以复用,不易维护、不易扩展

对比			易维护、易复用、易扩展,由于面向对象有封装、继承、多态 		性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比
				性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加 		如单片机、嵌入式开发、 Linux/Unix等一般采用面向过程开发,性能是最重要的
				易于维护  													因素。 

三、类与对象的主要区别

       对象:对象是类的一个实例(对象不是找个女朋友),有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。

       :类是一个模板,它描述一类对象的行为和状态。

四、面向对象三大主要特征

封装
       一层含义是把对象的属性和行为看成一个密不可分的整体,将这两者“封装”在一个不可分割的独立单元(即对象)中。
       另一层含义指“信息隐藏”,把不需要让外界知道的信息隐藏起来,有些对象的属性及行为允许外界用户知道或使用,但不允许更改,而另一些属性或行为,则不允许外界知晓,或只允许使用对象的功能,而尽可能隐藏对象的功能实现细节。

1、封装特性
(1)良好的封装能够减少耦合,符合程序设计追求“高内聚,低耦合”。
(2)类内部的结构可以自由修改。
(3)可以对成员变量进行更精确的控制。
(4)隐藏信息实现细节。

2、封装实现步骤

(1)修改属性的可见性来限制对属性的访问(一般限制为private),这段代码中,将 name 和 age 属性设置为私有的,只能本类才能访问,其他类都访问不了,如此就对信息进行了隐藏。

public class Person { 
    private String name; 
    private int age; 
}

(2)对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问,采用 this 关键字是为了解决实例变量(private String name)和局部变量(setName(String name)中的name变量)之间发生的同名的冲突。

public class Person{

    private String name;
    private int age;private boolean alive;
 
    public int getAge(){
        return age; 
    } 
 
    public void setAge(int age){ 
        this.age = age; 
    }public String getName(){ 
        return name; 
    }public void setName(String name){ 
        this.name = name; 
    }
 
    public boolean isAlive() {
		return alive;
	}
 
	public void setAlive(boolean alive) {
		this.alive = alive;
	}
	
}

(3)封装同时可以提高代码的安全性,例如普通的类属性不是private修饰就直接可以通过“对象名.属性 = xxx”对其赋值,但当我们用private修饰该属性后就不能这样对其做任意的修改了,而且我们还可以在其对外的访问方法中进行合法值校验。比如上例中的setAge()就可以更改为:

public void setAge(int age){
    if(age > 120)
        System.out.println("Age setting error");
    else
        this.age = age;
}

3、封装使用细节
(1)一般使用private访问权限
(2)提供相应的get、set方法来访问相关属性,这些方法通常是public修饰的。以提供对属性的赋值与读取操作。(注意!boolean变量的get方法是is开头。)
(3)一些只用于本类的辅助性方法,可以使用private修饰,希望其他类调用的方法用public修饰。

继承
       继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。
       继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

1、类的继承格式

       class 父类 { }
       class 子类 extends 父类 { }

注意说明
       需要注意的是 Java 不支持多继承,但支持多重继承。
在这里插入图片描述
2、继承的特性
(1)提高类代码的复用性。
(2)提高了代码的维护性。
(3)使得类和类产生了关系,是多态的前提(它也是继承的一个弊端,类的耦合性提高了)。
(4)子类拥有父类非 private 的属性、方法。
(5)子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
(6)子类可以用自己的方式实现父类的方法,即重写父类方法。
(7)Java 的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如 A 类继承 B 类,B 类继承 C 类,所以按照关系就是 C 类是 B 类的父类,B 类是 A 类的父类,这是 Java 继承区别于 C++ 继承的一个特性。
(8)继承可以使用 extends 和 implements 这两个关键字来实现继承,而且所有的类都是继承于 java.lang.Object,当一个类没有继承的两个关键字,则默认继承object(这个类在 java.lang 包中,所以不需要 import)祖先类。
(9)提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密,代码独立性越差)。

多态
       多态是同一个行为具有多个不同表现形式或形态的能力。
在这里插入图片描述
1、多态的类型

       方法重载:在一个类中,允许多个方法使用同一个名字,但方法的参数不同,完成的功能也不同。

       对象多态:子类对象可以与父类对象进行转换,而且根据其使用的子类不同完成的功能也不同(重写父类的方法)。

注意说明
       多态是面向对象的最后一个主要特征,它本身主要分为两个方面:

(1)方法的多态性:重载与覆写
       重载:同一个方法名称,根据不同的参数类型及个数可以完成不同的功能。
       覆写:同一个方法,根据操作的子类不同,所完成的功能也不同。
(2)对象的多态:父子类对象的转换
       向上转型:子类对象变为父类对象,格式:父类 父类对象 = 子类实例,自动。
       向下转型:父类对象变为子类对象,格式:子类 子类对象 = (子类)父类实例,强制。

2、多态的特性
(1)消除类型之间的耦合关系。
(2)可替换性。
(3)可扩充性。
(4)接口性。
(5)灵活性。
(6)简化性。

3、多态的实现方式
(1)重载与重写
(2)抽象类和抽象方法,在Java中,一个没有方法体的方法称为抽象方法。而一个类中如果有抽象方法,那么这个类就称之为抽象类。
(3)接口

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值