-
什么是面向对象?
从我们开始接触Java这门语言开始,就有人告诉我们这是一门面向对象的语言。有的时候我们还可以听到网上的程序员(媛)说没有找到对象,new一个不就行了嘛。那什么是面向对象呐?OOP一种编程范式或编程风格,以类或对象作为组织代码的基本单元,并将封装、抽象、继承、多态四个特性,作为代码设计和实现的基石。
举个最简单点的例子来区分面向过程和面向对象:
今天你上完课回寝室想喝奶茶,那你会怎么办呢?你有两个选择
1、到超市去卖一杯优乐美,然后回寝室烧水,然后再等泡好,最后再喝。
2、去奶茶店,张开嘴:老板!来一杯奶茶!
看出来区别了吗?1是面向过程,2是面向对象。
面向对象有什么优势呢?首先你不需要知道奶茶是怎么做的,降低了耦合性。如果你突然不想喝奶茶了,明天想吃一个冰淇淋,对于1的你可能不太容易了,还需要重新食材什么的。对于2来说太容易了,大喊:老板!今天来个冰淇淋吧,提高了可维护性。总的来说就是降低耦合,提高维护性!
-
面向过程和面向对象的优缺点
面向过程:
优点:流程化使得编程任务明确,具体步骤清楚,便于节点分析。效率高,面向过程强调代码的短小精悍,善于结合数据结构来开发高效率的程序。缺点:代码重用性低,扩展能力差。
面向对象:
优点:结构清晰,代码重用率高,可继承,可覆盖,低耦合。缺点:性能比面向过程差。
-
面向对象的三大特性
1.封装:
将一些属性和方法隐藏起来,提取出来成一个类,好吧我们上面的喝奶茶例子,我们不用关心他的生产了,它的生产交给一个特定的店,我们直接用这个店来卖就是了!
2.继承:
提高代码复用性,继承是多态的前提
3.多态:
父类或接口定义的引用变量可以指向子类或具体实现类的实例对象。提高了程序的拓展性。
下面我们不说理论了,直接上手代码加深理解
-
继承测试环境准备:
1.我们先来建一个父类,也就是总类,动物是一个总称,再定义一个Eat方法和Name属性
public class Animal {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void Eat() {
System.out.println("我是来自Animal类");
}
}
2.我再来写2个派生类,Rabbit和Leopard,我们来思考哈,他们是不是都要,那么我们就可以去继承Animal类的使用属性和方法,继承关键词extends,我们再类名后面加上extends并且跟上你要继承的那个类即可实现方法的复用
Rabbit.java
public class Rabbit extends Animal{
private String name;
@Override
public void Eat() {
//这个super.Eat()表示是调用父类的Eat方法
// 如果不加这句话就不会调用父类的方法
super.Eat();
System.out.println(getName()+"吃饭!");
}
}
Leopard.java
public class Leopard extends Animal{
private String name;
@Override
public void Eat() {
//我们这个类就不要supper
System.out.println(getName()+"吃饭!");
}
}
总结:从上面的两个类来个我们都没有写get和set,然而我们却能使用get的获取方法,这个就是继承,因为你的父类有get和set你就可以复用你父类的!
3.我们来建一个测试类testExtends.java
public class testExtends {
public static void main(String[] args) {
Leopard leopard = new Leopard();
leopard.setName("豹子");
leopard.Eat();
System.out.println("--------------");
Rabbit rabbit = new Rabbit();
rabbit.setName("兔子");
rabbit.Eat();
}
}
4.哈哈,写了半天了,我们最后来看看测试效果
注意点:从上面的测试代码我们可以看出来,我们的豹子类没有用supper调用父类的Eat方法,然后就没有出现"我来自Animal类"这句话。