java面向对象基础回顾
(49) (0)
面向对象
学习java大家接触到的最多的话语无非就是面向对象,可能大家没有仔细研究过这个问题,但是面向对象这个问题在JAVA面试中,基本百分之百会考到。可能大家也都有自己的理解,但是最重要的是能够清晰的表达出来,所以在这里我提供一份详细的答案,供大家理解。
啥是面向对象?
面向对象(Object Oriented,OO)是软件开发方法。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术[1] 发展到一定阶段后的产物。
个人理解:面向对象就是对现实世界的物理规律的抽象,能够是我们更加容易的以人类的思维方式来告诉机器来怎么实现我们想要的功能。
补充:面试标准答案:
-面向对象的三大特征:封装,继承,多态。
-继承是为了代码复用(java是单继承)
-多态 (接口)是为了弥补java单继承的缺陷,而应运而生,(方法的重载和覆盖(重写))
单继承缺陷:
1. 代码在多个子类中重复
2. 很难知道所有的行为
3. 运行时不容易改变
4. 迁一发动全身,造成子类不想要的改变
什么是多态?多态的机制?
多态是指不同的对象对于相同的消息会做出不同的相应。在java中通过将子类对象引用赋值给超类对象来实现方法的动态调用(运行时绑定)。
机制:方法重载(本类方法名相同,而方法参数类型不同或者参数个数或者返回值不同,来实现方法的动态调用),和方法覆盖(子父类之间)
接口和抽象类区别?
接口是类的高度抽象,抽象类的抽象程度较低于接口
1.接口可以多继承,抽象类单继承
2.抽象类的可以存在非抽象方法,和抽象方法,接口中只能存在抽象方法
3.抽象类中可以存在属性,不必须初始化,而抽象方法可以存在属性但必须初始化
个人理解
合理利用java中的继承和多态,我们可以把所有具体类的共有属性和能力都定义在超类中,把并不是每个类都具有的能力定义在接口中,让具体类都继承超类,动态实现接口
代码实现:
例子:人类(超类)(Person),具体类:学生(Student),老师(Teacher)
共有属性:name,id,age
共有能力:问好(sayHello)
老师能力:教学生(ITeach)
学生能力:玩(IPlay)
学生长大后也可能当老师,所以当学生长大后,也会具备教学生的能力,所以只要继承ITeach接口即可,当然老师也会娱乐,只要继承IPlay
结构图:
代码如下:
Person:
package com.leige.duotai;
/**
* @author 都市桃源 (只要路对,就不怕路远)
* @since 2016年8月17日
* @!TODO 定义超类,保存所有子类共有属性,和能力(方法)
* 项目名称:Demo
* 这里定义抽象类更好,所有子类都要覆盖sayHello方法
*/
public abstract class Person {
protected String name;
protected String id;
protected int age;
public Person(String name, String id, int age) {
super();
this.name = name;
this.id = id;
this.age = age;
}
public abstract void sayHello();
}
Student:
package com.leige.duotai;
/**
* @author 都市桃源 (只要路对,就不怕路远)
* @since 2016年8月17日
* @!TODO 子类学生
* 项目名称:Demo
*/
public class Student extends Person implements IPlay,ITeach{
/**
* @param name
* @param id
* @param age
* 定义子类的属性
* 如果超类中有非无参的构造方法和无参的构造方法
* 那么子类就要指定使用的超类构造方法
*/
public Student(String name, String id, int age) {
super(name, id, age);;// 指定父类的构造方法,不指定,编译器会隐式添加一个super()
}
/* (non-Javadoc)
* @see com.leige.duotai.Person#sayHello()
* 覆盖父类的方法,做出不同的相应
*/
@Override
public void sayHello() {
System.out.println("老师好,我是学生:" + "id是:" + this.id + "\t年龄: " + this.age +
"\t姓名是:"+ this.name
);
}
/* (non-Javadoc)
* @see com.leige.duotai.ITeach#teach()
* 实现接口具备教学能力
*/
@Override
public void teach() {
System.out.println(this.name+"我长大了,我也会教学生了");
}
/* (non-Javadoc)
* @see com.leige.duotai.IPlay#play()
*
* 具备娱乐能力
*/
@Override
public void play() {
System.out.println(this.name+"也爱玩");
}
}
Teacher:
package com.leige.duotai;
/**
* @author 都市桃源 (只要路对,就不怕路远)
* @since 2016年8月17日
* @!TODO
* 项目名称:Demo
* 老师类
*/
public class Teacher extends Person implements IPlay,ITeach{
/**
* @param name
* @param id
* @param age
* 指定父类的构造方法
*/
public Teacher(String name, String id, int age) {
super(name, id, age);// 指定父类的构造方法,不指定,编译器会隐式添加一个super()
}
@Override
public void sayHello() {
System.out.println("同学们好,我是老师:" + "id是:" + this.id + "\t年龄: " + this.age +
"\t姓名是:"+ this.name
);
}
/* (non-Javadoc)
* @see com.leige.duotai.IPlay#play()
* 具备教学能力
*/
@Override
public void play() {
System.out.println("老师也爱玩");
}
/* (non-Javadoc)
* @see com.leige.duotai.ITeach#teach()
*
* 具备娱乐能力
*/
@Override
public void teach() {
System.out.println("老师会教学生");
}
}
ITeach:
package com.leige.duotai;
/**
* @author 都市桃源 (只要路对,就不怕路远)
* @since 2016年8月17日
* @!TODO 教学能力接口
* 项目名称:Demo
*/
public interface ITeach {
public void teach();
}
IPlay:
package com.leige.duotai;
/**
* @author 都市桃源 (只要路对,就不怕路远)
* @since 2016年8月17日
* @!TODO 娱乐接口
* 项目名称:Demo
*/
public interface IPlay {
public void play();
}
测试类:
package com.leige.duotai;
/**
* @author 都市桃源 (只要路对,就不怕路远)
* @since 2016年8月17日
* @!TODO 测试demo
* 项目名称:Demo
*/
public class TestDemo {
public static void main(String[] args) {
Person stu=new Student("学生1号","1",18);
//基本能力
stu.sayHello();
//动态能力
((IPlay) stu).play();
((ITeach) stu).teach();
//教师同理
}
}
java面向对象基础回顾的更多相关文章
- 084 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 03 构造方法-this关键字
084 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 03 构造方法-this关键字 本文知识点:构造方法-this关键字 说明:因为时间紧 ...
- 【重走Android之路】【Java面向对象基础(三)】面向对象思想
[重走Android之路][基础篇(三)][Java面向对象基础]面向对象思想 1 面向对象的WWH 1.1 What--什么是面向对象 首先,要理解“对象”.在Thinkin ...
- 【重走Android之路】【Java面向对象基础(二)】细说String、StringBuffer和StringBuilder
[重走Android之路][基础篇(二)][Java面向对象基础]细说String.StringBuffer和StringBuilder 1.String String是Java中的一个final ...
- 【重走Android之路】【Java面向对象基础(一)】数据类型与运算符
[重走Android之路][基础篇(一)][Java面向对象基础]数据类型与运算符 1.数据类型介绍 在Java中,数据类型分为两种:基本数据类型和引用类型. 基本数据类型共8种,见下表: 基本数 ...
- 086 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 03 面向对象基础总结 01 面向对象基础(类和对象)总结
086 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 03 面向对象基础总结 01 面向对象基础(类和对象)总结 本文知识点:面向对象基础(类和对象)总结 说明 ...
- 085 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 04 构造方法调用
085 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 04 构造方法调用 本文知识点:构造方法调用 说明:因为时间紧张,本人写博客过程中只是 ...
- 083 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 02 构造方法-带参构造方法
083 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 02 构造方法-带参构造方法 本文知识点:构造方法-带参构造方法 说明:因为时间紧张, ...
- 082 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 01 构造方法-无参构造方法
082 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 01 构造方法-无参构造方法 本文知识点:构造方法-无参构造方法 说明:因为时间紧张, ...
- 081 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 06 new关键字
081 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 06 new关键字 本文知识点:new关键字 说明:因为时间紧张,本人写博客过程中只是 ...
随机推荐
- Typeface-为自定义字体提供字体内存缓存
Android 上自定义字体的代码一般如下: TextView textview = (TextView) findViewById(R.id.your_referenced_textview); / ...
- ov5640 video capture时,vfe_v4l2.ko模块挂掉问题分析
1.问题描述 在r16 tina平台,基于ov5640获取摄像头数据时,vfe_v4l2.ko模块挂掉. 2.配置信息 2.1上层应用设置的像素格式为V4L2_PIX_FMT_YUYV,分辨率为480 ...
- SVN 安装后报不是内部或外部命令
SVN安装后报不是内部或外部命令,也不是可运行的程序 解决方法:windows安装svn的时候默认是不安装 svn command line这个东西的,重新打开svn的安装exe,选择modify,将 ...
- lucene4.7学习总结 (zhuan)
http://blog.csdn.NET/mdcmy/article/details/38167955?utm_source=tuicool&utm_medium=referral ***** ...
- Activiti - 新一代的开源 BPM 引擎 (zhuan)
http://www.ibm.com/developerworks/cn/Java/j-lo-activiti1/ ****************************************** ...
- sqlservler 分页的实现
转载自:http://www.cnblogs.com/FreeDong/archive/2011/09/27/2193240.html 当我们显示列表信息的时候,我们常常以分页形式显示,当然在ASP. ...
- elasticsearch安装与使用(3)-- 安装中文分词插件elasticsearch-analyzer-ik
前言 elasticsearch(下面简称ES,安装ES点击这里)的自带standard分词只能把汉语分割成一个个字,而不能分词.分段,这就是我们需要分析器ik的地方了. http://{ip}:92 ...
- 大数据(11) - kafka的安装与使用
一.Kafka概述 1.Kafka是什么 在流式计算中,Kafka一般用来缓存数据,Storm通过消费Kafka的数据进行计算. 1)Apache Kafka是一个开源消息系统,由Scala写成.是由 ...
- nginx 的 autoindex on首页不显示的问题 按照下面几行要写上不然不行
[root@test html]# vim ../conf/nginx.confworker_processes 1;events { worker_connections 1024;}ht ...
- 2015 Multi-University Training Contest 3 1001 Magician
Magician Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=5316 Mean: n个数,2种操作,1是单点更新,2是询问区间 ...