Java基础之理解封装,继承,多态三大特性
封装
封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据。对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法。
代码理解
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-2 java 面向对象基本概念       封装继承多态 变量 this super  static 静态变量 匿名对象 值传递 初始化过程 代码块 final关键字 抽象类 接口 区别 多态  包 访问权限 内部类 匿名内部类 == 与 equal
		
java是纯粹的面向对象的语言 也就是万事万物皆是对象 程序是对象的集合,他们通过发送消息来相互通信 每个对象都有自己的由其他的对象所构建的存储,也就是对象可以包含对象 每个对象都有它的类型 也就是 ...
 - Java入门教程九(封装继承多态)
		
封装 封装就是将对象的属性和方法相结合,通过方法将对象的属性和实现细节保护起来,实现对象的属性隐藏.做法就是:修改属性的可见性来限制对属性的访问,并为每个属性创建一对取值(getter)方法和赋值(s ...
 - Java三大特性(封装,继承,多态)
		
Java中有三大特性,分别是封装继承多态,其理念十分抽象,并且是层层深入式的. 一.封装 概念:封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将抽象得到的数据 ...
 - Java基础——面向对象(封装——继承——多态 )
		
对象 对象: 是类的实例(实现世界中 真 实存在的一切事物 可以称为对象) 类: 类是对象的抽象描述 步骤: 1.定义一个类 (用于 描述人:) ( * 人:有特征和行为) 2.根据类 创建对象 -- ...
 - java面向对象(封装-继承-多态)
		
框架图 理解面向对象 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程强调的是功能行为 面向对象将功能封装进对象,强调具备了功能的对象. 面向对象是基于面向过程的. 面向对象的特点 ...
 - Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态)
		
Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态) 1.面向对象的三大特性: (1)继承  继承是一种创建新类的方式,在Python中,新建的类可以继承一个或多个父类,父类又可以 ...
 - OOP三大核心封装继承多态
		
OOP支柱 3 个核心:封装 继承 多态 封装就是将实现细节隐藏起来,也起到了数据保护的作用. 继承就是基于已有类来创建新类可以继承基类的核心功能. 在继承中 另外一种代码重用是:包含/委托,这种重用 ...
 - 浅谈学习C++时用到的【封装继承多态】三个概念
		
封装继承多态这三个概念不是C++特有的,而是所有OOP具有的特性. 由于C++语言支持这三个特性,所以学习C++时不可避免的要理解这些概念. 而在大部分C++教材中这些概念是作为铺垫,接下来就花大部分 ...
 - php面向对象 封装继承多态  接口、重载、抽象类、最终类总结
		
1.面向对象 封装继承多态 接口.重载.抽象类.最终类 面向对象 封装继承多态 首先,在解释面向对象之前先解释下什么是面向对象? [面向对象]1.什么是类? 具有相同属性(特征)和方法(行为)的一 ...
 
随机推荐
- OpenGL中的光照技术(翻译)
			
Lighting:https://www.evl.uic.edu/julian/cs488/2005-11-03/index.html 光照 OpenGL中的光照(Linghting)是很重要的,为什 ...
 - JQ 使用toggle实现DIV的隐藏和显示
			
$('.submenuA').toggle( function () { $(this).next('div').show(); }, function () { $(this).next('div' ...
 - springboot+elasticsearch配置实现
			
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
 - MTK 时区修改
			
1.修改packages/apps/Settings/res/xml-xx-xx/timezones.xml (xx-xx表示不同的语言和区域),添加下面的内容: <!-- timezo ...
 - mongodb 关闭服务器
			
./mongo use admin db.shutdownServer() 啦啦啦
 - bat批处理设置静态、动态、ping、查看网络配置
			
@echo off :startIP set /p source=S or D or C or P or E: echo source:%source% if /i "%source%&qu ...
 - 给树莓派安装看门狗的两种方法,二代B
			
树莓派的CPU是保护有硬件看门狗的,可以通过安装模块和值守程序来实现看门狗防止树莓派死机. 安装方法一:watchdog.sh的源码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...
 - linux 端口占用情况
			
1,查看8010端口是否被占用 [root@cloud ~]# netstat -an|grep 8010 tcp 0 0 0.0.0.0:8010 0.0.0.0:* LISTEN 2,查看8010 ...
 - 团购已满,O2O只是个笑话吗?
			
团购的用户习惯经过多年的“发酵”以后,大多数用户的团购习惯已经养成,同样一张电影票团购和直接现场购买的差价在一倍以上,当然O2O领域的其他情况也差不多,面对明显的“优惠”,用户当然乐意使用团购服务. ...
 - 基本入门ISD9160开发指南
			
1 整体认识ISD9160 其详细介绍肯定看他的数据手册.抛开一切觑头功能,我们第一步就把它当做一个M0单片机来使用了.它有IO口,有串口,有SPI等,那就像用其它M0 一样的使用它呗.这个没啥难度了 ...