关闭

1.Java基础:面向对象

61人阅读 评论(0) 收藏 举报
分类:

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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:4812次
    • 积分:391
    • 等级:
    • 排名:千里之外
    • 原创:36篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条