1.Java基础:面向对象

来源:互联网 发布:红色名录 知乎 编辑:程序博客网 时间:2024/06/10 22:57

1.什么实面向对象

面向对象是基于面向过程,对象是将功能进行了封装。只要找到了具体的类,创建出对象,就可以调用其中的具体功能。面向对象也是用来解决问题的一种思维模式。


2.面向对象4大特征

     1.抽象

1.抽象包括2个方面

数据抽象——就是用代码的形式表示现时世界中一类事物的特性,就是针对对象的属性。 

          过程抽象——就是用代码形式表示现实世界中事物的一系列行为,就是针对对象的行为特征。

          引自:http://blog.sciencenet.cn/home.php?mod=space&uid=469621&do=blog&id=379622

2.抽象类的作用

当在定义一个父类的时候,父类只知道子类的具体功能是什么,可以无法描述清楚子类的功能体时,

这时父类中的这个功能就可以使用抽象方法来描述,当一个类中有了抽象方法,那么这个类就变成了抽象类。   

3.抽象类的特点

          1.抽象类和抽象方法都需要被abstract修饰。抽象方法一定要定义在抽象类中。

          2.抽象关键字和那些关键字不能共存

          static:因为静态修饰的内容是可以通过类名直接调用,而一个抽象方法被静态了,使用类名调用这个抽象的方法没有意义。

final:final修饰的方法子类是无法复写的,而abstract修饰的方法要求子类必须复写。

private:私有的内容子类无法得到。

          3,抽象类中可以没有抽象方法,用于不能创建这个类。它主要用于设计模式中的适配器模式

为了更好的阐述抽象类,下面将使用一个例子来说明。

/** 抽象类:不具体*猫和狗*猫:*行为:吃、抓老鼠*狗:*行为:吃、看家*///动物类(抽象类)abstract class Animal {abstract void eat();}
//描述猫(没有继承抽象类eat的方法不能调用)class Cat {//吃void eat() {System.out.println("吃鱼");}//抓老鼠void catchMouse() {System.out.println("抓老鼠");}}//描述狗class Dog extends Animal {void eat() {System.out.println("啃骨头");}void lookHome() {System.out.println("看家");}}public class main {public static void main(String[] args) {Dog d = new Dog();d.eat();}}

2.继承

1.描述

一个类和另外一个类要产生关系,需要使用extends,把共性的内容抽取出来之后形成的一个类,

称为父类(基类、超类),而别的类继承这个父类称为子类,就形成子父类,这就是继承。

为了更好的阐述继承,下面将使用一个例子来说明。

<span style="font-size:14px;">/* * 描述手机 * 功能:打电话、发短信 *///描述手机class Phone {void call() {System.out.println("打电话");}void sendMessage() {System.out.println("发短信");}}/* * 手机升级 * 打电话显示号码、大头贴等 * 还可以发彩信 * 重新定义类,描述新功能,在继承以前的类中功能 */class NewPhone extends Phone {void call() {//调父类功能super.call();//本类功能(子类)System.out.println("显示号码");}void sendMessage() {//调父类功能super.sendMessage();System.out.println("发彩信");}}public class nine {public static void main(String[] args) {NewPhone p = new NewPhone();p.call();p.sendMessage();}}</span>

2.继承的好处

1.提高的代码的复用性。
2.让类与类之间产生了关系。为多态提供前提。

3.单继承、多继承、多重继承分析

1.Java只支持单继承,不支持多继承

2.Java支持多重继承。

class A{}class B extends A{}class C extends B{}


4.继承中构造方法

1、构造方法中的super()调用父类构造方法,必须在子类构造方法中的第一句。

2、如果在子类的构造方法中使用this()调用本类的其他构造方法,这时这个构造方法中的super()

就没有了。但是在这个子类中,最后肯定有一个构造方法中有super()去调用父类的构造方法。

3、当父类中没有空参数的构造方法时,在子类的构造方法中必须手动显示指定调用父类的哪个构造方法。

4、构造方法不存在复写。


3.封装

1.描述

封装是把过程和数据包围起来,对数据的访问只能通过已定义的方法和接口,进行调用。

2.封装表现

1.函数就是一个最基本封装体。

2.类其实也是一个封装体。

3.封装的好处

1.提高了代码的复用性。

2.隐藏了实现细节,还要对外提供可以访问的方式。便于调用者的使用。这是核心之一,也可以理解为就是封装的概念。


4.多态

1.描述

父类的引用或者接口的引用指向了自己的子类对象。

2.多态的前提

1、必须有关系:继承,实现。

2、通常都有重写操作。

为了更好的阐述多态,下面将使用一个例子来说明。

从以下代码可以发现无论是dog,还是cat,eat是他们的共性,那么将eat进行抽取,抽取到父类中。

/*多态 * 类是描述事物的,基于类就可以创建出对象 * 多态是指的是一个对象的多种表现形态,但最终还是一个对象 *  * 多态:指的是父类的引用变量指向了自己的子类对象,把这种形式称为多态 *///描述动物abstract class Animal { abstract void eat(); }

当有了Animal抽象类之后,狗和猫只要继承这个类,实现他们特有的eat方法即可

//描述狗class Dog extends Animal {void eat() {System.out.println("啃骨头");}}//描述猫class Cat extends Animal {void eat() {System.out.println("吃鱼");}}

通过上述代码发现,Animal类型既可以接受Dog类型,也可以接受Cat类型,当再让动物去做事时,不用面对具体的动物,

而只要面对Animal即可。因此上述method方法可以修改为

public class eight {public static void main(String[] args) {Dog d = new Dog();method(d);}//接收传过来的值public static void method(Animal a) {a.eat();}}

 method(Animal a)可以接受Animal的子类型的所有小动物,而method方法不用在关心是具体的哪一个类型。

即就是只建立Animal的引用就可以接收所有的Dog和Cat对象进来,让它们去eat。从而提高了程序的扩展性。

其实上述代码就已经形成了多态。

0 0