专栏首页毛利学PythonJava三大面向对象特性

Java三大面向对象特性

学习一时爽,一直学习一直爽

Hello,大家好,我是 もうり,一个从无到有的技术小白。

Java 是面向对象的高级编程语言,类和对象是 Java 程序的构成核心。围绕着 Java 类和 Java 对象,有三大基本特性:封装是 Java 类的编写规范、继承是类与类之间联系的一种形式、而多态为系统组件或模块之间解耦提供了解决方案。

面向对象

万物皆是对象

面向对象有以下特点:

  • 面向对象是一种常见的思想,比较符合人们的思考习惯;
  • 面向对象可以将复杂的业务逻辑简单化,增强代码复用性;
  • 面向对象具有抽象、封装、继承、多态等特性。

面向对象的编程语言主要有:C++、Java、C#等。

封装

封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果属性不想被外界访问,我们大可不必提供方法给外界访问。但是如果一个类没有提供给外界访问的方法,那么这个类也没有什么意义了。

比如下面定义了Person的对象

public class Person {
    // 私有变量
    private String name;
    private String idNum;
    private int age;
    // 公共方法

    public int getAge(){
        return age;
    }

    public String getName(){
        return name;
    }

    public String getIdNum(){
        return idNum;
    }

    public void setAge( int newAge){
        age = newAge;
    }

    public void setName(String newName){
        name = newName;
    }

    public void setIdNum( String newId){
        idNum = newId;
    }

}

new一个maoli对象

public class Maoli {
    public static void main(String args[]){
        Person maoli = new Person();
        maoli.setName("maoli");
        maoli.setAge(20);
        maoli.setIdNum("12345");
        System.out.print("Name : " + maoli.getName()+
                " Age : "+ maoli.getAge());
    }

}

OUT:
Name : maoli Age : 20

继承

继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

继承可以通过extends和implements两个关键字实现继承

在Person对象中添加公开方法

public class Person {
    // 私有变量
    private String name;
    private String idNum;
    private int age;
    // 公开方法
    public Person(String myName, String myid,int myage) {
        name = myName;
        idNum = myid;
        age = myage;
    }
    public int getAge(){
        return age;
    }

    public String getName(){
        return name;
    }

    public String getIdNum(){
        return idNum;
    }

    public void setAge( int newAge){
        age = newAge;
    }

    public void setName(String newName){
        name = newName;
    }

    public void setIdNum( String newId){
        idNum = newId;
    }

}
  • Maoli.java
public class Maoli extends Person {
    public Maoli(String myName, String myid,int myage) {
        super(myName,myid,myage);
    }
    public static void main(String args[]){
        Person maoli = new Person("maoli","12345",20);

        System.out.print("Name : " + maoli.getName()+
                " Age : "+ maoli.getAge()+"\n");
        System.out.println(maoli instanceof Person);
    }
}


Name : maoli Age : 20
true

关于继承如下 3 点请记住:

  1. 子类拥有父类对象所有的属性和方法(包括私有属性和私有方法),但是父类中的私有属性和方法子类是无法访问,只是拥有
  2. 子类可以拥有自己属性和方法,即子类可以对父类进行扩展。
  3. 子类可以用自己的方式实现父类的方法。

多态

多态是同一个行为具有多个不同表现形式或形态的能力。

比如我们说"宠物"这个对象,它就有很多不同的表达或实现,比如有小猫、小狗、蜥蜴等等。那么我到宠物店说"请给我一只宠物",服务员给我小猫、小狗或者蜥蜴都可以,那你到底要小猫还是小狗?

我们就说"宠物"这个对象就具备多态性。

// 抽象类
abstract class Animal {
    abstract void eat();
}

public class Test {
    public static void main(String[] args) {
        System.out.println("调用 show 方法");
        show(new Cat());  // 以 Cat 对象调用 show 方法
        show(new Dog());  // 以 Dog 对象调用 show 方法
        System.out.println("----------------------");
        Animal a = new Cat();  // 创建一个a猫
        a.eat();               // 调用的是 a猫的 eat
        Cat c = (Cat)a;        // c猫和a猫是同一种猫
        c.work();        // c猫去工作
        Animal b = new Dog();
        b.eat();
        Dog d = (Dog)b;
        d.work();
    }

    public static void show(Animal a)  {
        a.eat();
        // 类型判断
        if (a instanceof Cat)  {  // 猫做的事情
            Cat c = (Cat)a;
            c.work();
        } else if (a instanceof Dog) { // 狗做的事情
            Dog c = (Dog)a;
            c.work();
        }
    }
}


class Cat extends Animal {
    public void eat() {
        System.out.println("吃鱼");
    }
    public void work() {
        System.out.println("抓老鼠");
    }
}

class Dog extends Animal {
    public void eat() {
        System.out.println("吃骨头");
    }
    public void work() {
        System.out.println("看家");
    }

}
  • OUT
调用 show 方法
吃鱼
抓老鼠
吃骨头
看家
----------------------
吃鱼
抓老鼠
吃骨头
看家

 好了,这就是今天的内容了,今天最后我有一句话要说:

本文分享自微信公众号 - 毛利学Python(sen13717378202),作者:小sen

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 原创 | 一篇解决Springboot 整合 Elasticsearch

    结合业务的场景,在目前的商品体系需要构建搜索服务,主要是为了提供用户更丰富的检索场景以及高速,实时及性能稳定的搜索服务。

    润森
  • 初识Java泛型

    https://blog.csdn.net/weixin_44510615/article/details/102718400

    润森
  • 原创 | Springboot整合RabbitMQ

    MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。MQ是消费-生产者模型的一个典型的代表,一端往消息队列中不断写入消息...

    润森
  • Android全能开源项目xUtils3开发教程、简单封装

    用户2235302
  • 再忆RxJava---线程切换

    RxJava已经陆陆续续看了将近两年多了,觉得很有必要重新认识一下。而且最新github上都出了3.0了。重新看一下,一来作为回顾,二来也算是学习一下3.0 ...

    提莫队长
  • Java描述设计模式(06):建造者模式

    知了一笑
  • Android全能开源项目xUtils3开发教程、简单封装

    码农笔录
  • 模板方法模式浅析

    在开始本文之前,我们先来看下生活中的一些场景,比如造房子。有一个基本的骨架,每栋房子又可以有自己的特点,比如加个旗子,加一个塔楼等。

    孟君
  • Java工具集-数据库工具类

    cwl_java
  • Java微信公众平台开发(三)--接收消息的分类及实体的创建

    前面一篇有说道应用服务器和腾讯服务器是通过消息进行通讯的,并简单介绍了微信端post的消息类型,这里我们将建立消息实体以方便我们后面的使用!

    用户2417870

扫码关注云+社区

领取腾讯云代金券