面向对象编程

目录

一,包:

二,封装:

三,继承:(is a 的关系)

1,super关键字

2,子类对象要构造,要先帮父类对象进行构造

3,protected关键字

关于private,default,protected,public的权限区别:

关于protected在不同包的子类中的访问:

4,final关键字

四,组合:(a part of /has a)的关系

五,多态:

1,向上转型

2,向下转型

3,运行时绑定

1,发生运行时绑定的条件:

2,重写

3,发生向上转型的时机:

4,理解多态!

六,抽象类

抽象类注意:

七,接口:

接口注意:

八,常用的部分接口:

1,comparable

2,附加优化:comparator比较器

3,Clonable接口

深拷贝和浅拷贝


一,包:

包 (package) 是组织类的一种方式. 使用包的主要目的是保证类的唯一性

二,封装:

语法:使用private关键字,修饰字段和方法;【构造方法也可以被修饰】,只能在当前类中使用

意义:安全,对类的调用者来说,类的使用成本降低了

三,继承:(is a 的关系)

程序上理解:就是将共性进行抽取放到父类中,子类使用关键字extends来实现继承

优点:代码可以进行重用

注意:在JAVA中只能继承一个类(单继承)

继承的是什么:父类所有的属性和方法都可以被继承,(静态除外),但是父类中私有的只能被继承而不能访问

1super关键字

如果子类中有同父类中相同的属性,优先调用自己的,这里引用了一个关键字super来调用父类对象

使用 super 关键字得到父类实例的引用

super只能指向直接的父类,而不能指向间接的父类

注意thissuper的区别:this代表当前对象,而super代表父类对象的引用

注意:super和this调用构造方法的时候 一定要放到第一行,super和this都不能再静态方法中出现

2,子类对象要构造,要先帮父类对象进行构造

所有的构造对象都要通过构造方法来构造

3protected关键字

主要体现在继承上

要想访问被private修饰的对象有两个方法:

1,用getter和setter方法;

2,改为protected

关于private,default,protected,public的权限区别:

关于protected在不同包的子类中的访问:

注意:不能直接访问,要用super!!!

要想在静态方法中调用含有superfunc放法,通过对象的引用来调用func方法!!!

4final关键字

final修饰变量--->不能被修改了

final修饰类--->类不能被继承了

final修饰方法--->

如:String就是被final所修饰的,所以String不能被继承

四,组合:(a part of /has a)的关系

如上这就是一种组合关系

组合并没有涉及到特殊的语法(诸如 extends 这样的关键字), 仅仅是将一个类的实例作为另外一个类的字段

五,多态

1,向上转型

向上转型就是把子类的对象给父类,代码示例如下:

以上就是向上转型!即:父类引用引用了子类对象

注意:

向上转型之后只能通过父类引用来访问父类自己特有的属性和方法,不能够访问子类特有的属性和方法;

2,向下转型

如上便是一个上下转型,注意这里需要进行强制转换才能进行向下转型,让父类引用子类独有的对象,但是向下转型不安全,如果非要进行向下转型需要判断一下父类是否引用了独有对象对应的子类实例,如下:

animal此时只有引用Bird实例,才能进入if语句

3,运行时绑定

运行时绑定是多态的基础

1,发生运行时绑定的条件:

(1)发生向上转型:也就是父类引用引用子类对象

(2)通过父类引用调用父类和子类的同名覆盖方法(重写)此时就会发生运行时绑定

运行时绑定——绑定的是子类的同名方法

 

这就是一个运行时绑定!编译的时候还是animal的eat,但是运行的时候绑定到了dog的eat上(可以通过powershow查看,javap -c+回车查看

2,重写

这里的第三点返回值可以不相同,但是返回值之间要构成父子类关系,也就是协变类型,但是现在不常见了!

 

重写与重载的区别:

重写需要注意的问题:

调用普通方法:Invoke virtual、构造方法 invokespecial、静态方法:invokestatic(了解即可)

3,发生向上转型的时机:

(1)直接赋值

(2)向上传参

这就叫做多态!

(3)返回值

4,理解多态!

什么是多态:父类引用引用子类对象,通过父类引用调用父类与子类同名的覆盖方法或重写方法,此时,如果父类引用引用的子类对象不一样,调用这个重写的方法,表现的行为也是不一样的

六,抽象类

包含抽象方法的类统称为抽象类

抽象方法:该方法没有具体的实现,所以用abstract修饰

抽象类注意:

1,抽象类不可以被实例化

2,抽象类中可以有和普通类当中一样的成员,就是不能实例化

3,一个普通类如果继承了抽象类,这个类需要重写这个抽象类当中的抽象方法

4,一个抽象类A,继承了一个抽象类B之后,可以不重写该抽象类B中的方法,但是一旦这个抽象类A被继承后,那么一定要重写所有的抽象方法

5,抽象方法不能是private的,也不能被final修饰,也不能被static修饰

抽象类最大的意义就是为了被继承,也就是说抽象类存在的意义是为了让编译器更好的校验

七,接口:

接口当中可以定义字段,也可以定义方法(只能是不能具体实现的抽象方法)

但是从JDK1.8开始可以是具体实现的方法,但要加上default,即默认方法

接口注意:

(接口是由interface修饰的)

1,接口当中的方法没有具体的实现;

2,接口当中的方法默认全部都是public abstract;

3,接口当中的成员变量默认全都是public static final;

4,接口是不可以被实例化的;

5,接口的写法:一个类可以实现一个接口,通过implements

6,一般情况下接口都是由大写的I开头的

7,如果一个类实现了接口,那么该类也要重写接口中的抽象方法

8,接口也可以发生向上转型

9,可以同时继承抽象类,也可以同时实现多个接口,但是类只能继承一个

先继承类,再实现接口

10,接口的出现是为了满足Java当中多继承的要求

11,接口当中可以有静态方法的

12,接口的引用可以引用不同的实例,但前提是这个实例一定是实现了这个接口的

只要这个类具备这个功能,接口就可以引用这个实例

八,常用的部分接口:

1,comparable

2,附加优化:comparator比较器

接口与接口之间的关系:extends扩展关系

3,Clonable接口

Object 类中存在一个 clone 方法, 调用这个方法可以创建一个对象的 "拷贝". 但是要想合法调用 clone 方法, 必须要先 实现 Clonable 接口, 否则就会抛出 CloneNotSupportedException 异常

深拷贝和浅拷贝

深拷贝:通过某一种拷贝,改变拷贝后的对象不影响原来的对象

浅拷贝:通过某一种拷贝,改变拷贝后的对象影响原来的对象

        这是第一次学习这么抽象的语法知识,尚有许多未能理解之处,待有了更深入的理解定会回来进行补充精炼!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值