OOP知识点总结

一.OOP标准
面向对象编程有着如下标准:
Static typing:静态类型,一个定义良好的类型系统应该通过强制执行一些类型声明和兼容性规则来保证它接受的系统的运行时类型安全。
Genericity:泛型,为“ready for change”和“design for/with reuse”:应该可以编写具有代表任意类型的正式泛型参数的类。
Inheritance:应该可以将一个类定义为从另一个类继承,以控制潜在的复杂性。
Polymorphism:多态,在基于继承的类型系统的控制下,应该可以将实体(表示运行时对象的软件文本中的名称)附加到各种可能类型的运行时对象。
Dynamic dispatch/binding:动态分配,动态绑定,在一个实体上调用一个特性应该总是触发与所连接的运行时对象的类型相对应的特性,这在调用的不同执行过程中不一定是相同的。
二.实例方法,类方法,实例变量,类变量
instance variable
实例变量:或叫实例域、实例字段(instance field),或叫成员变量(member variable)。实例的变量,每个实例的变量可能不同。

instance method
实例方法:或叫成员方法(member method)。供实例用的方法,必须要先有实例,才能通过此实例调用实例方法。

class variable
类变量:或叫静态域、静态字段(static field),或叫静态变量(static variable)。出现在这样的情况下:一个类的所有实例需要一个公有的属性,比如,一,统计实例个数;二,常量。类变量与类直接关联在一起。内存当中只有一个地方存放这个变量。任何实例都可以修改它的值(前提是它没有被final修饰符修饰,不然就是常量),但是,访问类变量并不需要实例,用类就可以操作了。

class method
类方法:跟类变量的基本特点一样。供类用的方法,可以没有实例,直接通过类来调用类方法。
从形式上看,类变量和类方法,比一般的变量和方法多了一个static修饰符。因为这个原因,类变量和类方法也被叫做静态变量和静态方法。

使用方式
实例方法可以直接访问实例变量,调用实例方法;
实例方法可以直接访问类变量,调用类方法。但不推荐这么做,原因是不清晰,容易把类变量误认为是实例变量,把类方法误认为是实例方法(借助IDE,它会给出警告信息);
类方法可以直接调用类变量和类方法;
类方法不能直接调用实例变量和实例方法;
类方法里面不能使用“this”关键字,因为没有实例存在,“this”不知道引用哪个实例。

三.接口
Interface,在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。

接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。

除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。

接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。另外,在 Java 中,接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。

接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。

接口与抽象类:
1 抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
2. 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
3. 接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。
4. 一个类只能继承一个抽象类,而一个类却可以实现多个接口。
注:
抽象类注意事项:

抽象类不能被实例化,为什么还有构造函数?

只要是class定义的类里面就肯定有构造函数。抽象类中的函数是给子类实例化的。

一个类没有抽象方法,为什么定义为抽象类?

不想被继承,还不想被实例化。

抽象关键字abstract不可以和哪些关键字共存?

final:如果方法被抽象,就需要被覆盖,而final是不可以被覆盖,所以冲突。
private:如果函数被私有了,子类无法直接访问,怎么覆盖呢?
static:不需要对象,类名就可以调用抽象方法。而调用抽象方法没有意义。

四.重写与重载
重写用@override修饰,通常用于子类改写父类的方法;重载通常则是一个类中,传入变量类型不同但方法名相同的一些方法,具体区别如下
在这里插入图片描述
下面有了多态的概念:
多态
概念:

对象在不同时刻表现出来的不同状态。

多态的前提:

要有继承或者实现关系。
要有方法的重写。
要有父类引用指向子类对象。
程序中的体现:
父类或者接口的引用指向或者接收自己的子类对象。

好处和作用:
多态的存在提高了程序的扩展性和后期可维护性。

弊端:
父类调用的时候只能调用父类里的方法,不能调用子类的特有方法,因为你并不清楚将来会有什么样的子类继承你。

多态的成员特点:

成员变量:编译时期:看引用型变量所属的类中是否有所调用的变量;
运行时期:也是看引用型变量所属的类是否有调用的变量。
成员变量无论编译还是运行都看引用型变量所属的类,简单记成员变量,编译和运行都看等号左边。
成员方法:编译时期:要查看引用变量所属的类中是否有所调用的成员;
运行时期:要查看对象所属的类中是否有所调用的成员。如果父子出现同名的方法,会运行子类中的方法,因为方法有覆盖的特性。
编译看左边运行看右边。
静态方法:编译时期:看的引用型变量所属的类中是否有所调用的变量;
运行时期:也是看引用型变量所属的类是否有调用的变量。
编译和运行都看等号左边。
一定不能够将父类的对象转换成子类类型!

父类的引用指向子类对象,该引用可以被提升,也可以被强制转换。

多态自始至终都是子类对象在变化!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值