何谓面向对象
面向对象
面向对象介绍:
- 定义,是一种思维方式,是一种思想。与面向过程比较,面向过程就是“我该怎么做”,一步一步的实现我要达到的目标;而面向对象是“我应该让谁去做”,侧重点在于让谁去做,不关注具体如何实现,只关注对象。
- 优点:(1)、更贴近于现实生活;(2)、面向对象可以将许多复杂的问题简单化;(3)、面向对象贴近于管理者的角度,而面向过程更贴近于执行者的角度。
- 如何用面向对象的思维进行编程学习?注重两个概念:类、对象,类就是现实生活中的一洗了事务的模板;对象是具体的某个事务。
- 自定义类也叫作模板类,由属性(实现功能)和成员变量(成员方法)构成。成员方法就是不用static修饰的方法。
- 不需要导包的情况:(1)java.long包下的所有所有类不需要导包;(2)同包下的类不需要导包;
成员变量有默认值。
- 堆的特点:(1)、无序但是有地址;(2)、等待JVM清理垃圾对象;(3)、堆中的内容必须通过地址使用。
一、 构造器,有称为构造方法和构造函数
1、 构造器是一种特殊的方法,
2、 只能和new一起使用。New在创建对象是做的三件事:(1)、在堆中为对象开辟空间,成员属性跟随对象进入到堆内存中并赋值;(2)、调用构造器为对象初始化信息;(3)、将地址返回值引用
3、构造器,构造方法的名字必须与当前类的名字一致,不需要返回值,不需要void。基本的格式如下:
修饰符 类名([参数列表]){
...
}/
4、构造器的作用:(1)是用来初识化对象信息的,并不是创建对象的。如果没有自定义构造器,编译器会自动添加一个构造器。在创建对象的同步可以指定或者初步确定对象的属性值,可以使用带参构造,在new对象时,对对象初始化值;(2)、构造器重载,调用不同构造器时看创建对象时候()中参数列表匹配的是哪一个构造器的参数列表,构造器不能用final、static、abstract等修饰。
二、 This关键字
1、 this:指的是当前对象,存储当前对象的地址。
2、 用法:(1)、在构造器的首行通过this调用当前其他构造器,this()---匹配构造器的参数
1、 区别同名成员变量和局部变量:如果不使用this,会发生就近原则 ;3在构造器中,this指代当前new的对象;在方法中,this指代当前调用成员方法的这个对象;如果不存在同名变量的问题,默认省略this.;如果存在同名变量的问题,默认就近原则,区分成员,this.,this.不能省略.哪个调用的成员方法,在这个成员方法中,this指代的是调用成员方法的对象
3、
4、 注意:在构造器的首行调用其他构造器时候不能相互调用;如果不使用,会发生就近原则;this不能使用在static修饰的方法中。
三、 static关键字 修饰变量,修饰方法
1 修饰变量:只能修饰成员变量,不能修饰局部变量。
2、 修饰方法:只能修饰静态方法(类方法)。
3、 使用方式;类名 对象
4、 注意事项:(1)、静态内容是属于类的,成员内容是属于对象的(2)、静态内容是独一份的,这个类中的所有对象共享这个类中的内容(3)、在静态内容中只能直接使用静态的内容,不能直接使用成员的内容(4)、非静态中可以使用成员内容,也可以使用静态内容。
四、 块 {}自成作用域;在方法中叫局部代码块(普通语句块);块中的局部变量在外部无法使用,只能在当前方法中使用。在方法中执行时机是调用方法时,在类中执行时机是创建对象时。.构造块先于构造器执行,如果有多个构造块,从上到下一次执行;静态{}在第一次加载类的时候只执行一次,先于主方法执行,如果有多个静态块,从上到下一次执行。执行顺序:静态块 --- main ---构造块---构造器
五、 多态
多态 面向对象三大特性之一。一种事物多种形态|多种表现形式
多态的前提: 类的继承 | 接口的实现
多态的最终体现: 父类的引用指向子类的对象
多态的目的:父类的引用在调用子父类中同名方法的时候,会调用子类中重写的方法
注意:子类中新增的方法对父类不可见;本类的引用指向本类的对象,当前类中所有内容都可以使用(父类继承的+自己新增的);多态使用成员(1)成员变量:编译运行找父类,编译运行看左边(2)成员方法:编译看父类,运行看子类,编译看左边,运行找右边,编译看类型,运行找对象
六、 Super,this和final关键字 super:指代父类对象
this: 指代当前创建对象
1) 用在构造器的首行可以掉用父类中的构造器
super(参数)-->匹配父类中构造器的参数
如果没有显示定义,默认在子类构造器的首行存在super(),默认调用父类的空构造
2) 区分子父类同名问题
如果存在同名问题,默认隐藏this,默认就近原则找当前子类中的,如果想要指定父类中,要使用super调用
注意:先父类后子类;不能显示同时定义this()和super(),因为都要存在于构造器的首行,但是可以隐式同时使用,默认调用父类空构造,显示调用子类其他构造器;就近找局部,然后如果同时存在局部,子类成员,父类成员同名问题,默认找局部,子类成员this,父类成员super
final 最终的 被final修饰的变量为常量,不能改变;被final修饰的方法,不能被重写;被final修饰的类不能被继承(太监类);思考: 被final修饰的一个对象的引用,是否能够修改对象中的属性值?
final Person p=new Person();
p.name="张三";
八,重写 重载 : -->方法:1.同一个类中;2.多个方法的方法名相同;3.方法签名不同
重写 : -->方法:1.不同的类;2.继承:3.方法签名相同
重写和重载的区别:子类中一旦方法重写,会对父类中同名的进行屏蔽;如果子类有重写父类中的方法,调用时会调用子类中重写的方法
检测重写方法的方式:
1.左边有向上的三角
2.在重写方法的上面添加一个注解 @Override
重写满足|注意的条件:
== 方法签名相同
<= 返回值类型:基本数据类型:子父类必须相同 引用数据类型:子类<=父类
>= 权限修饰符:子类>=父类
注意:1.被private修饰的方法不能被重写;2.被final修饰的方法不能被重写;3.被static修饰的方法不能被重写;如果子类中存在于父类静态方法重名的方法,记住要把子类中这个方法定义为静态的。
九.转型:
孔子装爹
孔子{name=孔子;age=18; void teach(){讲论语...} void play(){打王者}}
孔子{name=孔子爹;age=30; void teach(){做生意...}}
有一个人来找孔子爹讲做生意上课,但是孔子爹去旅行
办法: 孔子化妆装成他爹的样子去上课 --向上转型
KongZiDie k=new KongZi();
因为真实去的是孔子,所以teach讲课讲的内容是论语
因为孔子和同学们关系很好,索引相约一起打王者
卸妆-->变成孔子的样子,因为孔子会打王者
大范围类型 :父类 小范围类型: 子类
KongZi z=(KongZi)k; --向下转型
z.play();
如果先要调用子类中新增的方法,需要向下转型
ClassCastException 类型转换异常
instanceof 运算符
A引用 instanceof B
判断A的引用是否为B类类型的对象,或者B类子类的对象,如果是返回true,否则返回false
面向对象:
思想
封装:对外隐藏内部的实现细节,提供公共的访问方式
继承:子类继承父类,就可以拥有父类中的成员
多态:在继承的前提下和方法重写的前提下,可以提高代码的服用型和扩展性