面向对象三大特性(JAVA)

面向对象和面向过程的区别:

1.面向过程:大象装冰箱(3步:打开冰箱,放大象,关冰箱)

2.面向过程:创造一个大象(new 一个大象实例),让大象走进冰箱(调用大象实例的走进冰箱的方法)

3.总结:
面向过程:侧重的是过程
优点:简单
缺点:代码量大的情况下,维护性特别差

面向对象:侧重的是对象,上帝视角,需要什么创建什么
优点:可扩展性非常强,维护成本低,复用性强,可读性高………
缺点:新手上手难

所有的面向对象程序设计语言都有三个特性:封装、继承和多态

tip:另外需要说下面向对象不是某个语言,也不是某个语言特有的东西,而是一种编程思想。

一、封装

1.封装是对象和类概念的主要特性。

2.对象:万物皆对象

3.类:具有相同特性和行为的对象组成的集合就是类,JAVA实际中的类就是指一个数据类型

4.类和对象的关系:类是对象的抽象,而对象是类的具体实例。
可以理解为类是图纸,对象是根据图纸画好的物品

代码如下:

public class Lamp { //创建一个灯的图纸
    String color = "白光";
    String power = "220瓦";
    private String chengben = "2元";//这里体现了对成员变量的控制

    public void onoff(int a){
        if(a == 1){
            System.out.println("开灯");
        }else {
            System.out.println("关灯");
        }
    }
}
public class client {
    public static void main(String[] args) {
        //假设有一个买来一个灯,输入1,就是开灯,输入0,就是关灯
        Lamp lamp = new Lamp();//根据灯的图纸造灯
        lamp.onoff(1);
        lamp.onoff(0);  //进行封装无需对内部构造了解
        System.out.println(lamp.power);//查看灯的功率
        System.out.println(lamp.color);//查看灯的功率
        //System.out.println(lamp.chengben);//查看灯的成本,这里体现了对成员变量的控制
    }
}

作用

作用1:将具体的实现细节装到一个容器中,想要使用直接调用就行,不用在意内部实现细节
如灯和开关,使用者只要控制开关就可以控制灯的状态,而不需要了解电路是怎样铺设的。
作用2::可以对成员变量进行更精确的控制(通过public,private等修饰实现)

二、继承

1.继承:子类可以自动拥有父类中除了私有内容的其他所有内容。

当出现x是一种y的时候,x就可以继承y

2.当然如果子类对父类给的东西(属性和方法)不满意也可以进行方法重写

代码如下:
父类:

public class Liyuan{
    String name = "李渊";
    private void weakness(){
        System.out.println("李渊怕老婆");
    }
    public void sky(){
        System.out.println("李渊的天下");
    }
    public void xingshi(){
        System.out.println("姓李");
    }
}

子类:

public class Lishimin extends Liyuan{

    public  void sky(){
        System.out.println("李世民的天下");//对父类的天下不满意进行重写
    }
    
    public static void main(String[] args) {
        Lishimin lishimin = new Lishimin();
        lishimin.xingshi();//子类可以拥有父类的非私有部分
        lishimin.sky();
        System.out.println(lishimin.name);
//        lishimin.weakness();//私有类型不能继承
    }
}

作用

作用:简化代码的开发

三、多态

1.多态是指同一个对象具有多个不同表现形式或形态的能力。

2.多态实现的三个必要条件:继承,方法重写,父类引用指向子类对象

3.父类类名 引用名称 = new 子类类名();(父类引用指向子类对象)

4.比如猫和狗是都是动物 --> 继承关系,动物就有了猫和狗两种表现形式和能力

5.把子类的对象赋值给父类的引用(变量)向上转型,会屏蔽子类中特有的方法,如果想继续使用子类特殊方法就得向下转型,而且得是强转
代码如下:
父类:

public class Animl {
    public void eat(){
        System.out.println("动物吃东西");
    }
}

Cat子类:

public class Cat extends Animl {
    public void eat(){
        System.out.println("猫吃鱼");
    }
    public void catchmouse(){
        System.out.println("猫会抓老鼠");
    }

}

Dog子类:

public class Dog extends Animl {
    public void eat(){
        System.out.println("狗吃骨头");
    }
}

Elephant子类:

public class Elephant {
    public void eat(){
        System.out.println("大象吃香蕉");
    }
}

操作类:

public class Client {

//    public static void feed(Cat cat){
//        cat.eat();
//    }
//    public static void feed(Dog dog){
//        dog.eat();
//    }
    public static void feed(Animal animal){
        animal.eat();
    }

    public static void main(String[] args) {
        Animal cat = new Cat();//向上转型
        Animal dog = new Dog();
        feed(cat);
        feed(dog);
//        ((Cat) cat).catchmouse(); //向下转型
    }
}

此外因为java没有多继承,所以引入了接口类型,使得java的类可以多继承。
不过因为是接口所以不叫继承,而是类实现多个接口。

作用

作用:把不同数据类型进行统一

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值