Java基础-面向对象(三)

Java基础 专栏收录该内容
42 篇文章 2 订阅
面向对象的三大特征
  • 继承 inheritance
    • 子类 父类
    • 子类可以从父类继承属性和方法
    • 子类可以提供自己单独的属性和方法
  • 封装/隐藏encapsulation
    • 对外隐藏某些属性和方法
    • 对外公开某些属性和方法
  • 多态 polymorphism
    • 为了适应需求的多种变化,使代码变得更加通用!
    • 面向过程只有封装性(功能的封装,而没有数据的封装),没有继承和多态
封装(encapsulation)
  • 为什么需要封装?封装的作用和含义?
    • 我要看电视,只需要按一下开关和换台就可以了。有必要了解电视机内部的结构吗?有必要碰 碰显像管吗?
    • 我要开车,….
  • 隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提高系统的可扩 展性、可维护性。
  • 我们程序设计要追求“高内聚,低耦合”。
    • 高内聚 :就是类的内部数据操作细节自己完成,不允许外部干涉;
    • 低耦合 :仅暴露少量的方法给外部使用。

使用访问控制符,实现封装

成员(成员变量或成员方法)访问权限共有四种:
  • public 公共的
    • 可以被项目中所有的类访问。(项目可见性)
  • protected 受保护的
    • 可以被这个类本身访问;同一个包中的所有其他的类访问;被它的子类(同一个包以及不同包中的子类)访问
  • default/friendly 默认的/友好的(包可见性)
    • 被这个类本身访问;被同一个包中的类访问。
  • private 私有的
    • 只能被这个类本身访问。(类可见性)
类的访问权限只有两种
  • public 公共的
    • 可被同一项目中所有的类访问。 (必须与文件名同名)
    • default/friendly 默认的/友好的
    • 可被同一个包中的类访问。
      在这里插入图片描述
封装要点
  • 类的属性的处理:
    • 一般使用private. (除非本属性确定会让子类继承)
    • 提供相应的get/set方法来访问相关属性. 这些方法通常是public,从而提供对属性的读取操作。

(注意:boolean变量的get方法是用:is开头!)

  • 一些只用于本类的辅助性方法可以用private,
  • 希望其他类调用的方法用public
继承
  • 类是对对象的抽象,继承是对某一批类的抽象,从而实现对现实世界更好的建模。
  • 提高代码的复用性!
  • extands的意思是“扩展”。子类是父类的扩展
  • 不同的叫法:超类、父类、基类、子类、派生类
    在这里插入图片描述
方法的重写(override)
  • 在子类中可以根据需要对从基类中继承来的方法进行重写。
  • 重写方法必须和被重写方法具有相同方法名称、参数列表和返回类型。
  • 重写方法不能使用比被重写方法更严格的访问权限。(由于多态)
Object类
  • Object类是所有Java类的根基类
  • 如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类
  • 重写:toString方法:
    • 默认返回:包名+类名+@+哈希码
    • 可以重写!

代码示例

package com.cwl.base.day03.oop;

/**
 * @program: java_base
 * @description:
 * @author: ChenWenLong
 * @create: 2019-11-07 10:43
 **/
public class TestObject {

    public static void main(String[] args) {
//		Object obj;

        TestObject   to = new TestObject();
        System.out.println(to.toString());

        Person2  p2 = new Person2("String", 6);
        System.out.println(p2.toString());

    }

    public String toString(){
        return  "String";
    }
}

class Person2 {
    String name;
    int age;

    @Override
    public String toString() {
        return name+",String"+age;
    }

    public Person2(String  name, int age) {
        this.name = name;
        this.age = age;
    }


}
  • 1
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2020 CSDN 皮肤主题: 成长之路 设计师:Amelia_0503 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值