封装

封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据。对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法。

代码理解

public class Student {

    public Student(String name, Integer age) {
this.name = name;
this.age = age;
} private String name;
private Integer age; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
}
}

核心要点

  • 数据是私有的
  • 获取只能通过getter方法
  • 更改只能通过setter方法

注意要点

  • getter方法禁止返回可变对象的引用,可变对象引用会破坏封装(下面演示错误的使用封装方法)

    public class Student {
    
        public Student(Date birthday) {
    this.birthday = birthday;
    } private Date birthday; public Date getBirthday() {
    return birthday;
    } public void setBirthday(Date birthday) {
    this.birthday = birthday;
    }
    } class Main{
    public static void main(String[] args) {
    Student student = new Student(new Date());
    System.out.println("student对象的Date:"+student.getBirthday());//student对象的Date:Tue Dec 11 10:50:50 CST 2018
    Date birthday = student.getBirthday();
    birthday.setTime(888888888);
    System.out.println("student对象的Date:"+student.getBirthday());//student对象的Date:Sun Jan 11 14:54:48 CST 1970
    }
    }

继承

通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。继承的过程,就是从一般到特殊的过程。继承概念的实现方式有二类:实现继承与接口继承。实现继承是指直接使用基类的属性和方法而无需额外编码的能力;接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力;

代码理解

public class Student extends People {

}

class People{
void sayHello(){
System.out.println("Hello Word");
} } class Main{
public static void main(String[] args) {
Student student = new Student();
student.sayHello();
}
}

核心要点

  • 子类会继承父类的非private的属性和方法
  • 可以在子类构造器中使用super关键字对父类private私有与域进行初始化
  • 在类的继承层次中可以使用abstract定义抽象类作为派生其他类的基类
    • 包含一个或者多个的抽象方法必须声明为抽象类
    • 抽象类不可以被实例化
    • 子类实现所有的抽象方法后不再是抽象类
    • 抽象类的层次中可以使用多态既抽象类对象变量引用非抽象类子类实例

多态

一个对象变量可以指向多种实际类型的现象被成为多态;在运行时能够自动选择调用那个方法被称为动态绑定.

代码理解

public class Student extends People {
@Override
void sayHello(){
System.out.println("I am a Student");
}
void studentHello(){
System.out.println("It is student Say");
}
}
class Teacher extends People{
}
class People{
void sayHello(){
System.out.println("Hello Word");
}
}
class Main{
public static void main(String[] args) {
People people1 = new Teacher();
People people2 = new Student();
people1.sayHello();
people2.sayHello();
((Student) people2).studentHello();
}
}

核心要点

  • 要实现多态必须存在继承关系(student和teacher都继承people)

  • 子类需要将父类的方法重写(继承已经默认重写),如果重写了父类方法则会使用重写方法

  • 需要将子类的引用赋值给父类,这样父类变量就可以调用非子类特有方法

  • 父类引用不可以赋值给子类变量,如果必须需要;可以使用强制类型转换,强制类型转换会暂时忽略对象的实际类型,使用对象的全部功能

    Student student = (Student) new People();

Java基础之理解封装,继承,多态三大特性的更多相关文章

  1. -1-2 java 面向对象基本概念 封装继承多态 变量 this super static 静态变量 匿名对象 值传递 初始化过程 代码块 final关键字 抽象类 接口 区别 多态 包 访问权限 内部类 匿名内部类 == 与 equal

    java是纯粹的面向对象的语言 也就是万事万物皆是对象 程序是对象的集合,他们通过发送消息来相互通信 每个对象都有自己的由其他的对象所构建的存储,也就是对象可以包含对象 每个对象都有它的类型  也就是 ...

  2. Java入门教程九(封装继承多态)

    封装 封装就是将对象的属性和方法相结合,通过方法将对象的属性和实现细节保护起来,实现对象的属性隐藏.做法就是:修改属性的可见性来限制对属性的访问,并为每个属性创建一对取值(getter)方法和赋值(s ...

  3. Java三大特性(封装,继承,多态)

    Java中有三大特性,分别是封装继承多态,其理念十分抽象,并且是层层深入式的. 一.封装 概念:封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将抽象得到的数据 ...

  4. Java基础——面向对象(封装——继承——多态 )

    对象 对象: 是类的实例(实现世界中 真 实存在的一切事物 可以称为对象) 类: 类是对象的抽象描述 步骤: 1.定义一个类 (用于 描述人:) ( * 人:有特征和行为) 2.根据类 创建对象 -- ...

  5. java面向对象(封装-继承-多态)

    框架图 理解面向对象 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程强调的是功能行为 面向对象将功能封装进对象,强调具备了功能的对象. 面向对象是基于面向过程的. 面向对象的特点 ...

  6. Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态)

    Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态) 1.面向对象的三大特性: (1)继承 ​ 继承是一种创建新类的方式,在Python中,新建的类可以继承一个或多个父类,父类又可以 ...

  7. OOP三大核心封装继承多态

    OOP支柱 3 个核心:封装 继承 多态 封装就是将实现细节隐藏起来,也起到了数据保护的作用. 继承就是基于已有类来创建新类可以继承基类的核心功能. 在继承中 另外一种代码重用是:包含/委托,这种重用 ...

  8. 浅谈学习C++时用到的【封装继承多态】三个概念

    封装继承多态这三个概念不是C++特有的,而是所有OOP具有的特性. 由于C++语言支持这三个特性,所以学习C++时不可避免的要理解这些概念. 而在大部分C++教材中这些概念是作为铺垫,接下来就花大部分 ...

  9. php面向对象 封装继承多态 接口、重载、抽象类、最终类总结

    1.面向对象 封装继承多态  接口.重载.抽象类.最终类 面向对象 封装继承多态  首先,在解释面向对象之前先解释下什么是面向对象? [面向对象]1.什么是类? 具有相同属性(特征)和方法(行为)的一 ...

随机推荐

  1. mysql查询两个日期之间相差多少天?

    需求描述: 在mysql中,查看两个日期之间相差多少天 操作过程: 1.通过datediff函数,查看两个日期之间相差多少天 mysql> select datediff('2018-06-26 ...

  2. repo_file_in_folder

    -- Create table create table repo_file ( uuid ), create_time ), creator ), modify_time ), modifier ) ...

  3. Grunt--Less

    摘要: 之前介绍了自动构建工具Grunt,其中有一个模块是"grunt-contrib-less",下面是配置Grunt自动编译less文件. 安装: Grunt是基于node,功 ...

  4. python类和模块区别,python命名空间

    在python中,类可以提供模块级别之下的命名空间. 如果一个模块写很多函数,某些函数之间共同完成一组功能,用类会看起来更清晰,在调用时候也会更好,对于ide补全有更小范围的限定提示. 类提供 继承 ...

  5. [转]总结使用Unity 3D优化游戏运行性能的经验

    转载自:http://www.gameres.com/msg_221889.html 作者:Amir Fasshihi 流畅的游戏玩法来自流畅的帧率,而我们即将推出的动作平台游戏<Shadow ...

  6. Java多线程之可见性与原子性——synchronized VS volatile

    <转:http://blog.csdn.net/uniquewonderq/article/details/48113071> 程序举例: 代码: package com.synch; p ...

  7. Java 流(Stream)、文件(File)和IO -- Java ByteArrayInputStream类

    字节数组输入流在内存中创建一个字节数组缓冲区,从输入流读取的数据保存在该字节数组缓冲区中.创建字节数组输入流对象有以下几种方式. 接收字节数组作为参数创建: ByteArrayInputStream ...

  8. RFC文件

    RFC(Request For Comments)-意即“请求评议”,包含了关于Internet的几乎所有重要的文字资料.如果你想成为网络方面的专家,那么RFC无疑是最重要也是最经常需要用到的资料之一 ...

  9. IDEA maven项目下测试mybatis例子,使用mappper class或package引入mapper映射文件,总是报错Invalid bound statement(所有配置完全正确)

    困扰几个小时,终于查到解决办法及原因(可以直接到最后看解决方案) 环境就是用IDEA搭建的maven项目,主要jar包引入配置如下 <dependencies> <dependenc ...

  10. Web暴力破解--前端JS表单加密进行爆破

    0x01 前言 常见的js实现加密的方式有:md5.base64.shal,写了一个简单的demo作为测试. 0x02 代码 login.html <!DOCTYPE HTML> < ...