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。从而提高了程序的扩展性。
其实上述代码就已经形成了多态。
- 1.Java基础:面向对象
- java基础 面向对象
- Java面向对象基础
- java基础-面向对象
- java面向对象基础
- JAVA面向对象基础
- Java面向对象基础
- Java面向对象基础
- java基础----面向对象
- java 面向对象基础
- 【Java基础】面向对象
- java基础面向对象
- JAVA面向对象基础
- Java基础:面向对象
- java基础---面向对象
- Java基础--面向对象
- Java基础:面向对象
- Java基础--面向对象
- 新人首发
- 分布式与集群的区别
- leetcode: Segment Tree:Range Sum Query - Mutable(307)
- 新人首发
- Rerun DTE BI Env and Refresh Hudson Preflight Env
- 1.Java基础:面向对象
- qt quick开发常用的SLOT(保存、加载、另存)代码
- 新人首发
- Rails content_tag vs tag
- 使用Toolbar遇到的问题
- 新人首发
- Struck: Structured Output Tracking with Kernels中用到的样本采样方法详解
- json解析,我的幼稚
- 不同的Linux操作系统下安装PCL的方法