Java面向对象
1、对象
对象是一个自包含的实体,用一组可识别的特性和行为来识别。面向对象编程,OOP。
2、类
类就是具有形同的属性和功能的抽象的集合。
3、构造方法
构造方法,就是对类进行实例化,构造方法与类同名无返回值,也不需要void,在new的时候调用。
Cat cat = new Cat() new 后面的Cat就是构造方法。第一个Cat是类
所有类都有构造方法,如果自己不写则系统会自动生成空的构造方法,该方法什么都不做,只起到实例化对象的功能。如果自己写,那么默认的方法就失效了。
4、方法重载
方法重载提供了创建同名方法的能力,但这个能力需要使用不同的参数类型。
- 方法名相同,参数不同
- 可以在不影响之前的代码的基础上加功能。
public Cat();
public Cat(String name);
public Cat(String name,int age);
5、封装好处
1、解耦合
2、类内部自由修改
3、具有清晰的对外接口
6、多态
导入:有一个京剧演员世家,子承父业,父子二人在京剧上都有较深的造诣。在一场本属于来父亲的演出中,父亲生病了,由于京剧是有脸谱的,于是儿子代替老父亲演出。因为是儿子代替老父亲演出,因此演出内容应该是父亲本场演出所计划的,观众已经买了票,不能变更,但演出承担着者是儿子,儿子可以在内容上有自己的特色。
多态表示不同的对象可以执行相同的动作,但是通过他们自己的实现代码来执行。
多态注意事项:
- 第一,子类是以父类的身份出现
- 第二,子类在工作时以自己的方式来实现
- 第三,子类以父类的身份出现时,子类特有的属性和方法不可用。
7、抽象类
导入:Animal animal = new Animal()这样是没有意义的,因为我们可以想象出一只猫,一只狗长什么样,但是,一个动物长啥样。因此动物是不能被实例化的,可以定义为抽象的。
抽象类注意事项:
-
第一,抽象类不能实例化,实例化没有意义
-
第二,抽象类中的抽象方法必须被子类重写
-
第三,如果一个类中含有抽象方法,那么这个类必须被定义为抽象类,不论是否还包含其他方法。
抽象类通常代表一个抽象概念,他提供一个继承的出发点,当设计一个新的抽象类时,一定是用来继承的,所以,在一个以继承关系形成的等级结构里面,树叶节点应当是具体类,而树枝节点均应当是抽象类。
8、接口
导入:现在,除了正常的猫,我们发现还存在一种猫——机器猫,这个猫除了一般动物的功能,还有自己的特异功能:口袋变东西。以及一个特殊的猴孙悟空,一只另类的猪猪八戒。他们除了有普通猫、猴、猪的功能,还都会变东西。此时如果想实例上述三个特殊动物的实例对象,显然继承多态等方式已经不能实现。
接口:interface。接口是把隐式公共方法和属性组合起来,以封装特定功能的一个集合。一旦类实现了接口,类就可以支持接口所指定的所有属性和成员。声明接口与抽象类完全相同,但不允许提供方法体。接口不能实例化,实现接口必须实现接口中的所有方法和属性。
9、抽象类与接口对比
这两个概念不好理解,相似又不同。
抽象类可以给出一些成员的实现,接口却不包含成员的实现,抽象类的抽像成员可以被子类部分实现,接口的行为需要实现类的完全实现,一个类只能继承一个抽象类,但可以实现多个接口。
- 第一,类是对对象的抽象;抽象类是对类的抽象;接口是对行为的抽象
- 第二,如果行为跨越不同类的对象,可使用接口;对于一些相似的类对象,用继承抽象类。
- 第三,从设计角度讲,抽象类是子类的公共部分,泛化出父类,然后子类继承,而接口是根本不知子类的存在,方法如何实现还不确定,预先定义。