前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java三大面向对象特性

Java三大面向对象特性

作者头像
润森
发布2019-10-23 17:51:29
3610
发布2019-10-23 17:51:29
举报
文章被收录于专栏:毛利学Python

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

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

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

面向对象

万物皆是对象

面向对象有以下特点:

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

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

封装

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

比如下面定义了Person的对象

代码语言:javascript
复制
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对象

代码语言:javascript
复制
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对象中添加公开方法

代码语言:javascript
复制
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
代码语言:javascript
复制
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. 子类可以用自己的方式实现父类的方法。

多态

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

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

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

代码语言:javascript
复制
// 抽象类
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
代码语言:javascript
复制
调用 show 方法
吃鱼
抓老鼠
吃骨头
看家
----------------------
吃鱼
抓老鼠
吃骨头
看家

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小刘IT教程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 面向对象
  • 封装
  • 继承
  • 多态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档