如何理解面向对象

如何理解面向对象

一、什么是类

我的理解是:类是对一类对象的描述。类通过定义一些行为和属性向我们描述了这类对象是什么样子的,既然知道了对象的样子,我们就可以来创建出对象了。所以,类之所以可以用来创建对象,原因就在于类清晰的描述了对象的样子。

二、什么是对象

对象是堆上的一块内存空间,包含了类里面定义的一些属性。对象在被创建出来后为了方便别的对象使用,一般会把地址交由一个引用保管,引用的值就是这个对象的地址。

三、如何去理解类里的访问控制符、属性和方法?

提供一个角度:站在当前对象的角度去看类里面定义的访问控制符、属性和方法。

下面是一个例子:

public class Person {
    private String wallet;				//钱包
    
    private static String garden;		//花园	
	
    public int height;					//身高
    
    public void help()
    {
        Person p1 = new Person();
        p1.wallet;						//允许;当前对象是Person类对象,p1也是Person类对象,p1对象向当前对象开放私有属性, 当前对象可以访问p1对象的私有属性
        
        p1.work();						//允许;当前对象是Person类对象,p1也是Person类对象,p1对象向当前对象开放私有方法, 当前对象可以访问p1对象的私有方法
       
        p1.gadern;						//允许;当前对象是Person类对象,可以访问到Person类的私有属性
        
        Person.garden;					//允许,理由同上
    }
    
    private void work()
    {
    }    
}
public class Dog{
    
    public void method() {
        Person p1 = new Person();  
        p1.wallet;  //不允许,当前对象是Dog类型对象,p1是Person类型对象,当前对象想访问p1对象的私有属性,由于p1对象不对其他类型对象开放私有属性,所有访问不到
        
        p1.work(); //不允许,当前对象是Dog类型对象,p1是Person类型对象,当前对象想访问p1对象的私有属性,由于p1对象不对其他类型对象开放私有方法,所有访问不到
        
        p1.garden;	//不允许,当前对象是Dog类对象,Person类的私有属性不对Dog类型对象开发
        Person.garden; //不允许,理由同上
    }
    
}
  • wallet属性是当前对象私有的,不允许被其他类型对象访问。比如其他类型对象有这样的行为:Person p1 = new Person(); p1.wallet ,其他对象创建了一个p1对象,并且想获得p1对象的wallet,但是对于p1对象来说,wallet是自己私有,所以不允许被访问。在Person类中确实允许的,因为当前对象和p1都是Person类的。
  • height属性是当前对象向外公开的,可以被任何对象访问。比如其他对象有这样的行为:Person p1 = new Person(); p1.height,其他对象创建了一个p1对象,并且想获得p1对象的height,对于p1对象来说,wallet是向任何对象公开的,所以允许被访问。在Person类中确实允许的,因为当前对象和p1都是Person类的。
  • work方法是当前对象私有的行为,不向其他对象提供服务。其他对象想通过Person p1 = new Person(); p1.work();让p1对象提供服务,但对p1来说work()是自己私有的行为,因此访问失败。
  • help方法是当前对象公开的行为,向所有对象提供服务。
  • garden属性是Person类私有的属性,表示只对所有Person类的对象公开,不对其他类型的对象公开。其他类型对象想通过Person.garden或者Person p1 = new Person(); p1.garden去访问都会失败。但是在Person类中使用Person.garden或者Person p1 = new Person(); p1.garden是可以访问的,这是因为当前对象就是Person类对象。

总结下:

  1. private声明的属性表示是当前对象私有的,不允许其他类型对象访问;
  2. public声明的属性表示是当前对象向外公开的,可以被任何对象访问;
  3. protected声明的属性向本类对象和其子类对象公开,子类对象可以访问;
  4. priavate static声明的属性是类私有的属性,只向本类型对象公开;
  5. 以此类推。。。
四、类、抽象类和接口

类描述了一类对象的共同的行为和属性;抽象类描述了多个类共同的行为和属性;接口描述了多个类共同的行为。一组对象抽离出共同的行为和属性后就形成了类,多个类继续抽离出共同的行为和属性就成了抽象类,接口就是多个类(包含抽象类)抽离出共同的行为。

四、封装、继承和多态
  • 封装:当前对象向外隐藏属性和实现细节,仅公开一个足够安全的访问接口供其他对象访问。
  • 继承:现在有多个类具有很多公共的行为和属性,我们可以在每个类中都写一份这些共同的行为和属性,但是为了节省代码量,把多个类再次向上抽象,抽离出公共的行为和属性形成父类,通过继承父类完成了原先要达到的效果。
  • 多态:A对象的行为依赖于一个通用的父类型的对象,通过传入不同的子类型对象可以改变A对象的行为。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值