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.什么是类? 具有相同属性(特征)和方法(行为)的一 ...
随机推荐
- 放假前来个笑话:IT人士群聚喝酒的讲究(超级搞笑)
大家喝的是啤酒,这时你入座了…… 你给自己倒了杯可乐,这叫低配置. 你给自已倒了杯啤酒,这叫标准配置. 你给自己倒了杯茶水,这茶的颜色还跟啤酒一样,这叫木马. 你给自己倒了杯可乐,还滴了几滴醋,不仅颜 ...
- 利用opencv作透明重叠人群密度热度图
在作热度图的时候我们经常需要将热度图调整透明度后叠加在原图上达到更好的展示效果.比如检测人气密度的热度图: (来自sensetime) 一般作图的时候会第一时间想到matplotlib,因为可以很方便 ...
- mysql中json_merge函数的使用?
需求描述: 通过mysql中的json_merge函数,可以将多个json对象合并成一个对象 操作过程: 1.查看一张包含json列的表 mysql> select * from tab_jso ...
- go 类型转换
https://studygolang.com/articles/3400 https://studygolang.com/articles/6633
- javascript生成m位随机数
根据时间生成m位随机数,最大13位随机数,并且不能保证首位不为0 function ran(m) { m = m > 13 ? 13 : m; var num = new Date().getT ...
- Ognl_JSTL_学习笔记
控制标签 使用Struts2标签必须先导入标签库,在页面使用如下代码导入Struts2标签:<%@taglib prefix="s" uri="/struts-ta ...
- Ubuntu 12.04下安装QQ 2012 Beta3(转)
Ubuntu 12.04下安装QQ 2012 Beta3 由于wine的发展非常迅速.现在网上的利用老版本的wine来安装QQ2012的教程已经有些过时了.实际上操作起来非常简单: 第一步:Ctr ...
- iOS Runloop的超级讲解
这是目前看过的最好的一片中文讲解RunLoop的文章,推荐给大家看一下,原文链接:http://blog.ibireme.com/2015/05/18/runloop/ https://segment ...
- pycharm 激活
方法1: (1)更新**hosts**文件 [hosts文件百度云下载地址](https://pan.baidu.com/s/1o9ZujxS) **hosts**文件在windows中的地址为: C ...
- 【VirtualBox】设置NAT端口映射-SSH登录
参考地址: http://www.cnblogs.com/sky20081816/p/3951889.html http://blog.csdn.net/jiangsyace/article/deta ...