Java------------------------面向对象(待完善)

一、面向对象
1、程序的概念:
程序是为了模拟现实世界,解决现实问题而使用的计算机语言编写的指令集合。
2、对象:
一切客观存在的事物都是对象,万物皆对象。
3、任何对象一定有自己的特征和行为。
4、特征和行为:特征即属性,行为即方法。
5、类与对象的关系:
类:定义了对象应具有的特征和行为,类是对象的模板。
对象:拥有多个特征和行为的实体,对象是类的实例。
二、方法重载
概念:在一个类中定义了多个相同名称的方法。
要求:1.方法名称相同 2.参数列表不同 3.与访问修饰符、返回值无关。

class dog{
	public void eat(){
	System.out.pringtln("狗吃");
	}
	public void eat(int i){
	System.out.pringtln("狗吃了"+i+"斤狗粮");
	}
	public void eat(int i ,String name){
	System.out.pringtln("一个叫"+name+"的狗吃了"+i+"斤狗粮");
	}
}

三、构造方法
1.概念:类中特殊的方法,主要用于创建对象。
2.特点:
(1)名称与类名完全相同,包括大小写。
(2)没有返回值类型
(3)创建(new)对象时,触发构造方法的调用,不可通过点“.”的形式手工调用。

public class Review {
	public Review(){
		System.out.println("这是无参构造");
	}
	
	public Review(String  name){
		System.out.println("这是有参构造");
	}
}

3.注意:
(1)如果在类中没有显示定义过构造方法,则编译器默认提供无参构造方法。
(2)如果已经手动添加过有参构造方法,则无参构造方法不再默认提供,可结合需求自行添加(建议手动添加无参构造)
四、this关键字
I. this代表“当前实例”,即是模板中的当前对象,模板服务与哪个对象,this就指向哪个对象。
II. this第一种用法:调用***本类中的实例属性、实例方法***。例如:this.name、this.run() ,
III. this第二种用法:调用***本类中的其他构造方法***。例如:this()、this(实参)。注意:必须在构造方法的首行。
IV. 默认来讲,实例属性和方法前的this.隐式存在
五、三大特性
(一)封装
I. 概念:尽可能隐藏对象的内部实现细节,控制对象的修改及访问的权限。
II. private的访问修饰符,修饰属性,达到本类可见的效果。
III. get/set方法是外界访问私有属性的唯一通道,方法内部可对数据进行过滤。(可在set方法中添加过滤条件)
IV. 提供公共访问方法,以保证数据可以正常录入。
(二)继承
I. 程序中的继承,是类与类之间特征和行为的一种赠与或获得。
II. 类与类之间必须满足“is a”的关系。
III. 父类的选择:功能越精细,重合点越多的,越接近直接父类。
IV. 父类的抽象:根据程序需要使用到的多个具体类,进行共性的提取,进而定义父类。
V. 在一组相同或类似的类中,抽取出共性的特征和行为,定义在父类中,实现重用。
VI. 产生继承关系之后,子类可以使用父类中的属性和方法,也可定义子类独有的属性和方法。
VII. 完整的子类 = 父类共性 + 子类独有
VIII. 好处:既提高代码的复用性,又提高代码的可扩展性。
IX. Java为单继承,一个类只能有一个直接父类,但可以多级继承,属性和方法逐级叠加。
XI. 不可继承:
1). 父类的构造方法,子类不可继承。
2). 父类中由private修饰的成员,不可继承(不可见)。
3). 父类中由default修饰的成员,子类不在同包时,不可继承(不可见)。
XII. 方法的覆盖/重写(Override)
1). 当父类提供的方法无法满足子类需求时,可以在子类中定义和父类相同的方法进行覆盖。
2). 要求:
a). 方法名、参数表、返回值,必须与父类完全相同。
b). 访问修饰符应与父类相同或比父类更宽泛。
3). 执行机制:子类覆盖父类方法后,优先执行子类覆盖后的方法版本。
3. super关键字:
I. 第一种用法:在子类中,可以通过" super. "的形式访问父类的属性和方法,可解决一定的属性遮蔽、方法覆盖后的父类成员调用问题。
II. 第二种用法:super() 表示在子类构造方法的首行,调用父类的无参构造方法。
4. 继承关系下的对象创建:
I. 继承关系下,构建子类对象时,会先构建父类对象。
II. 由“父类共性”+ “子类独有”组合成一个完整的子类对象。
5. 继承关系下的对象创建流程:
I. 构建父类对象
II. 初始化自身属性
III. 执行自身构造方法中的逻辑代码
6. 注意:
I. 如果子类构造方法中,没有显示定义super()或super(实参),则默认提供super()。
II. 同一个子类构造方法中,super()、this()不可同时存在。

(三)多态:
I. 概念:父类引用指向子类对象,从而产生多种形态。
II. 构成多态的前提,二者之间必须具有直接或间接的继承关系,父类引用可指向子类对象,进而形成多态。
III. 父类引用仅可调用父类中所声明的属性和方法,不可调用子类独有的属性和方法。
IV. 多态两种应用场景:
a). 使用父类作为方法形参,实现多态。
调用方法时,可传递的实参类型包括:本类型对象+其所有的子类对象。
b). 使用父类作为方法返回值,实现多态。
调用方法后,可得到的结果类型包括:本类型对象+其所有的子类对象。
V. 装箱和拆箱:
1). 装箱:父类引用中保存真实子类对象,称为向上转型(多态核心概念)。
2). 拆箱:将父类应用中的真实子类对象,强转回子类本身类型,称为向下转型。
3). 注意:向下转型时,如果父类引用中的子类对象的类型与目标类型不匹配,则会发生类型转换异常。java.lang.ClassCastException
VI. instanceof关键字:
语法:父类引用 instanceof 类型(返回boolean类型的结果)
抽象:
通过abstract修饰类,意为抽象类,不能new对象

  1. abstract的意思:抽象的,似是而非的,像,却又不是,具备某种对象的特征,但不完整。
  2. abstract修饰类,意为“不够完整、不够具体,不该独立存在”
    I. 即为抽象类,不能独立new对象。
    II. 可被子类继承,对子类提供共性的属性和方法。
    III. 可声明引用,更纯粹的使用多态。
    IV. 抽象类的构造方法的作用:构建子类对象时,先构建父类对象,由父类共性+子类独有组成完整的子类对象。
  3. 总结:
    I. abstract修饰类:不能new对象,但可以声明引用。
    II. abstract修饰方法:只有方法声明,没有方法实现。(需包含在抽象类中)
    III. 抽象类中不一定由抽象方法,但由抽象方法的类一定是抽象类。
    IV. 子类继承抽象类之后,必须覆盖父类当中所有的抽象方法,否则子类还是抽象类。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章