java面向对象的理解

自己对面向对象编程的理解:

之前的结构化编程,要注意数据类型和算法,过程繁琐,不易修改。在Wirth的书中,算法(过程)第一,数据存储的方式(数据结构)第二。但是面向对象话编程,第一看的是数据,之后再看算法(过程)。
第一看的是数据是什么意思呢?
就是不管怎么去实现他,你先满足用户的需求,需要哪些数据,(也就是类),在利用各个数据之间的联系,进行方法的调用,这就是面向对象化编程。面向对象化编程是时代进步的需要。是降低开发时间的一种新的编程思想。

几个基本概念
:根据java核心这本书所言,类是构造对象的模板或者是蓝图,把类想象成制作甜饼的切割机,类想象成为小甜饼,比喻十分恰当,做饼干和蛋糕的时候不正是需要几个模具吗?

封装: 又名数据隐藏,不能让类中的方法直接访问其他类的实例域。个人理解是通过创建实例进行其他类的访问。封装的作用是什么?降低程序之间的耦合度,在本类调用其他类的时候,其他类是不可见的。可以不需要管其他类中的方法是如何改变的,用了什么算法,什么逻辑!提高了重用性和可靠性,重用性就是修改了一个类的数据类型或者方法,对其他模块没有影响,这个代码还可以重用。可靠性和重用性依赖于封装。

特性:
行为,状态,标识。
对象的状态影响他的行为,如果一个订单已经付款了,就应该拒绝调用删增订单中的条目。如果一个学生已经离校了,他就不可能在学校学习。
对象的状态可能会发生改变,但不可能是自发的,一定是调用对象方法,也就是对象的行为发生改变的时候,状态才会改变。这也是封装性的体现

状态是什么:是当前特征的信息,就是成员变量。状态并不能作为一个对象的特征,假设woman,man两个类,都有birth,name,age,school相同的属性,两个不相同的类,状态竟然一样。但是行为会不同,woman的上厕所和man的上厕所能一样吗?

标识是什么:个人理解标识是一个类与其他类的相比特有的行为就叫标识。

类-类关系:

  • 依赖:一个类的方法操纵另一个类的对象,就叫依赖
    简单来说一个类行为上需要另一个类的帮助。他自己解决不了这件事。就跟表白时候,要叫上一帮朋友壮胆烘托气氛一样,有的时候还会叫爱心蜡烛啊花啊帮忙。
  • 继承:一个类继承另一个类,前者叫后者的子类,后者为前者的父类,也就是超类,子类继承父类,拥有父类的特征,还多了一些其他的行为。
  • 聚合:一个类的成员变量里有另一个类的对象。

注意点
由于公有数据很危险,所以应该把所有的数据设成私有的。

java 和其他的语言不同的地方
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uV2CiNuO-1573024440726)(en-resource://database/2063:1)]

重载:java中的重载指的是方法,对于一个类中,相同的方法名,不同的参数就产生了重载,不只是构造器,java允许重载任何方法.

  • 注意:返回值不属于判断标准,对于名字相同,参数相同,返回值不相同的方法,不属于方法重载

重写
重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!

  • 重写的好处在于子类可以根据需要,定义特定于自己的行

  • 访问权限不能比父类中被重写的方法的访问权限更低。

this表示类实例本身。
this的用法
1、表示对当前对象的引用!

public class A{
   public A getA(){
      return this;//表示获取当前实例本身
   }
}

2、表示类的成员变量,而非函数参数,注意在函数参数和成员变量同名是进行区分!

public class A{
   private int a = 0;//位置1
   public A getA(int a){
      this.a = a;//前面this.a表示 位置1 的a,赋值=号右侧的表示参数a
   }
}

3、用于在构造方法中引用满足指定参数类型的构造器。

public class A{
   public A(int a){
   }
   public A(){ 
     this(1);//这里调用自身的构造函数public A(int 
   }
}

为什么会出现this指针呢?
当我们在一个类中写一个方法时,当传入的参数的参数名与该类的成员变量名相同,并且把参数赋值给与之同名的成员变量时,编译器不知道到底是参数变量赋值给成员变量还是成员变量赋值给参数变量.
有的时候编译器会隐晦的加上.

对this的理解
但构造器创建一个对象的时候,对象实例就有自己的指针,一直对他一心一意的,一直心向他,见this如见实例本身,所以this调用方法,就相当于对象实例的动作啦.

对final的理解

  • 被final修饰的类不可继承

  • 修饰的方法会被锁死,防止继承类修改他的设定.

  • 修饰的变量,
    如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。

深入理解final:
https://www.cnblogs.com/dolphin0520/p/3736238.html#!comments

对static的理解
static方法就是没有this的方法,因为在static方法中不能调用非静态方法.假如说静态方法中可以调用非静态变量的话,在main方法中,写一个静态方法,运行根本不会执行,因为对象都没有,怎么可能有成员变量呢?所以就会产生矛盾.由于你无法预知在非静态方法中是否访问了非静态成员变量,所以也禁止在静态成员方法中访问非静态成员方法。
static方法中不能调用非静态方法和非静态的成员变量,这个说法是相对的.如果在静态方法里面引用一个对象,不就可以获得非静态变量吗?
是的,类比于main方法就是这样,其实静态方法也可以当主函数.

  • 问题:静态方法如果new类是什么时候开始创建的?
    我认为只要new一个对象就会在堆里面分配内存.

  • 为什么会产生static:
    很显然,被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。  static可以用来修饰类的成员方法、类的成员变量,另外可以编写static代码块来优化程序性能。

深入理解static

https://www.cnblogs.com/dolphin0520/p/3799052.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值