面向对象编程
面向过程编程和面向对象编程的区别:
面向过程,面向对象是两种不同处理问题的角度
面向过程更注重的是事情的每个步骤以及顺序,面向对象更注重事情的参与者以及各自的任务
面向过程编程:
举个栗子:洗衣机洗衣服
面向过程将这个任务解析成一系列的步骤:1、打开洗衣机 2、放入脏衣服 3、放洗衣粉 4、注水 5、开始洗衣服。。。
面向对象编程:
还是举个栗子:洗衣机洗衣服
在这个任务中,面向对象将任务拆分成两个对象:
人:1、打开洗衣机 2、放入衣服 3、放入洗衣机粉 4、盖上洗衣机盖子
洗衣机:1、启动 2、自动注水 3、开始请洗 4、风干
从上面的例子中可以看出,面向过程比较直接高效,而面向对象方便复用,扩展和维护。
面向对象编程三大特征:封装、继承、多态
封装
封装:封装的意义在于明确标识出允许外部使用的所有成员方法和参数,而内部的细节不对外公开,外部可以通过对象反复调用。
- javaBean的属性私有,提供getset对外访问,因为属性的赋值或者获取逻辑只能由JavaBean本身决定,而不能由外部修改;
private String name;
public void setName(String name){
this.name="Test_"+name'
}
//该name有自己的命名规则,不能由外部直接复制修改赋值
-
orm框架
操作数据库,我们不需要关心连接时如何建立的,sql执行的过程是怎样的,只需要引入mybatis
,调用对象所需要的方法即可。
继承
继承:把相同的属性和方法集成父类,再由父类提供给子类使用,私有类除外;子类(派生类)继承父类(基类、超类)的方法,并作出自己的改变或者扩展。
this和super的区别:
- this:代表当前调用的对象,this可以调用到本类中的成员方法,this(age,name)调用奔雷的构造方法
- super:可以调用到父类成员变量、父类的方法,super(age,name)调用父类的构造方法、super.sayHello()调用父类的方法
多态
多态:英文Polymorphism 一个类的多种形态;基于对象所属类的不同,外部对同一个方法的调用,实际执行的逻辑不同,多态是在一定的继承关系方法重写的情况下实现的;
编译时多态:
- 编译期间决定目标方法
- 通过overloading重载实现
- 方法名相同,参数不同
/**
* 方法重载
*/
public class Demo1 {
public int addtion(int x,int y){
return x+y;
}
public int addtion(double x,int y,int z){
return (int)x+y+z;
}
public int addtion(int x,int y,int z){
return x+y+z;
}
public static void main(String[] args) {
Demo1 demo=new Demo1();
System.out.println(demo.addtion(1,2));
System.out.println(demo.addtion(1.0,2,3));
System.out.println(demo.addtion(3,4));
}
}
//运行结果:
3
6
7
运行时多态:
- 运行期间决定目标方法】
- 方法名相同,参数相同
- overriding和继承实现
- JVM目标方法
package EverydayTopic;
/**
* 方法重写override
*/
class Animal {
public void run() {
System.out.println("animal is running..");
}
void eat() {
System.out.println("animal is eating...");
}
}
//dog
class Dog extends Animal {
@Override
public void run(){
System.out.println("i can running---dog");
}
}
class Cat extends Animal {
@Override
public void run(){
System.out.println("i can running++cat");
}
@Override
public void eat(){
System.out.println("i can eating++cat");
}
}
public class OverideDemo {
public static void main(String[] args) {
Animal dog=new Dog();
Animal cat=new Cat();
dog.eat();
// dog.run();
cat.eat();
cat.run();
}
}
//运行结果
animal is eating...
i can eating++cat
i can running++cat
//运行结果可见dog中eat()没有重写实现,则把父类Animal的eat()打印出来
//Cat中的eat() run()实现重写,结果能够打印
类和对象的关系:
类:把相同特征的归为一类,是抽象的概念;比如鱼类、汽车等
对象:是类的实体。是真实存在的一个事物。符合类的概念的一个实物,叫做对象。
如果要调用类里面的属性和方法,首先要创建对象。 对象是类的实例,通过对象可以重复调用属性和方法。
优势:代码重用,提高开发效率。