面向对象
学习java大家接触到的最多的话语无非就是面向对象,可能大家没有仔细研究过这个问题,但是面向对象这个问题在JAVA面试中,基本百分之百会考到。可能大家也都有自己的理解,但是最重要的是能够清晰的表达出来,所以在这里我提供一份详细的答案,供大家理解。
啥是面向对象?
面向对象(Object Oriented,OO)是软件开发方法。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术[1] 发展到一定阶段后的产物。
个人理解:面向对象就是对现实世界的物理规律的抽象,能够是我们更加容易的以人类的思维方式来告诉机器来怎么实现我们想要的功能。
补充:面试标准答案:
-面向对象的三大特征:封装,继承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();
//教师同理
}
},多态