Java面向对象的三大特征详解
一、封装(Encapsulation)
封装也称信息隐藏,是指利用抽象数据类型把数据和基于数据的操作封装起来,使其成为一个不可分割的整体,数据隐藏在抽象数据内部,尽可能的隐藏数据细节,只保留一些接口使其与外界发生联系
封装性的思想:
- 将类的属性私有化
- 提供公共的方法(setter & getter)来实现调用
package com.yyx.pratice;
/**
* JavaBean
*/
public class Person {
private String name;
private Integer age;
public Person() {
super();
}
public Person(String name, Integer age) {
super();
this.name = name;
this.age = 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;
}
}
二、继承(Inheritance)
继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力
继承所表达的就是一种对象类之间的相交关系,它使得某类对象可以继承另外一类对象的数据成员和成员方法。
若类B继承类A,则属于B的对象便具有类A的全部或部分性质(数据属性)和功能(操作),我们称被继承的类A为基类、父类或超类,而称继承类B为A的派生类或子类
注意:java中类的继承性只支持单继承:一个类只能继承一个父类。反之,一个父类可以有多个子类;一个接口可以有多个父类,也就是接口可以是多继承
子类实例化对象会先创建父类的对象
package com.yyx.pratice;
public class Person {
private String name;
private Integer age;
public Person() {
super();
System.out.println("我是父类的空参构造器");
}
public Person(String name, Integer age) {
super();
this.name = name;
this.age = age;
System.out.println("我是父类的有参构造器");
}
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;
}
public void eat() {
System.out.println("吃饭!");
}
public void walk() {
System.out.println("走路!");
}
}
package com.yyx.pratice;
public class Student extends Person {
private String stuNo;
public Student() {
super();
}
public Student(String name, Integer age, String stuNo) {
super(name, age);
this.stuNo = stuNo;
}
public String getStuNo() {
return stuNo;
}
public void setStuNo(String stuNo) {
this.stuNo = stuNo;
}
@Override
public void eat() {
super.eat();// 显示调用父类的eat()方法
System.out.println("我重写了父类的eat()方法");
}
public void study() {
System.out.println("子类自己的study()方法");
}
}
package com.yyx.pratice;
public class JavaPratice {
public static void main(String[] args) {
Student student=new Student();
student.eat();
student.walk();
student.study();
Student stu=new Student("李四", 23, "1232");
stu.eat();
stu.walk();
stu.study();
}
}
运行结果:
我是父类的空参构造器
吃饭!
我重写了父类的eat()方法
走路!
子类自己的study()方法
我是父类的有参构造器
吃饭!
我重写了父类的eat()方法
走路!
子类自己的study()方法
三、多态(Polymorphism)
多态性,可以理解为一个事物的多种表型形态。 两种表现形式:1)方法的重载与重写 2)子类对象的多态性
子类对象的多态性即父类的引用指向子类对象,父类引用只能调用父类中存在的方法和属性,不能调用子类的扩展部分,因为父类引用指向的是堆中子类对象继承的父类;
但是如果强制把超类转换成子类的话,就可以调用子类中新添加而超类没有的方法了;同时,父类中的一个方法只有在父类中定义而在子类中没有重写的情况下,才可以被父类类型的引用调用;
对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将会调用子类中的这个方法,这就是动态连接
子类对象的多态性使用的前提:①要有类的继承或实现②要有子类对父类方法的重写
程序运行分为编译状态和运行状态。对于多态性来说,编译时,"看左边",将此引用变量理解为父类的类型;运行时,"看右边",关注于真正对象的实体:子类的对象。那么执行的方法就是子类重写的
package com.yyx.pratice;
public class JavaPratice {
public static void main(String[] args) {
Person person = new Student();
person.eat();// 只能调用子类已经重写的父类Person的eat()方法
if (person instanceof Student) {
Student stu1 = (Student) person;
/*
* 调用子类才有的方法
*/
stu1.study();
stu1.walk();
}
Behavior behavior = new Student();
behavior.walk();// 只能调用子类已经重写的接口Behavior的walk()方法
if (behavior instanceof Student) {
Student stu2 = (Student) behavior;
/*
* 调用子类才有的方法
*/
stu2.study();
stu2.eat();
}
}
}
class Student extends Person implements Behavior {
@Override
public void eat() {
super.eat();
}
@Override
public void walk() {
System.out.println("人都要走路");
}
public void study() {
System.out.println("学生要学习");
}
}
class Person {
public void eat() {
System.out.println("人都要吃饭");
}
}
interface Behavior {
void walk();
}
Java面向对象的三大特征详解的更多相关文章
- Java面向对象的三大特征
Java面向对象的三大特征 java面向对象的三大特征:“封装.继承.多态”.更多Java技术知识,请登陆疯狂软件教育官网.微信搜索微信号:疯狂软件,参加2015年优惠活动,有机会获得优惠劵和代金劵. ...
- Java面向对象的三大特征和五大原则
Java面向对象的三大特征 封装 封装(Encapsulation)是指属性私有化,根据需要提供setter和getter方法来访问属性.即隐藏具体属性和实现细节,仅对外开放接口,控制程序中属性的访问 ...
- Java面向对象之各种变量详解
在Java中一定有很多变量让大家头疼,成员变量.类变量.局部变量等等,今天就来分别认识认识他们吧! Java面向对象之各种变量详解 前言 在 Java语言中, 根据定义变量位置的不同,可以将变量分成两 ...
- JAVA面向对象:三大特征 封装讲解
一.JAVA封装 1.封装的理解 封装是 JAVA 面向对象思想的 一 种特性,也是一种信息隐蔽的技术 2.封装的原则 将类中的某些信息隐藏起来,来防止外部程序直接访问,通过类中的方法实现对隐藏的信息 ...
- Java面向对象中this关键字详解 意义+实例讲解【hot】
this关键字 >>>便于理解简单的定义 this关键字可以简单的理解为,谁调用this所在的方法,this就是谁. 类的构造函数与getter.setter方法常用到this关键字 ...
- 封装是java面向对象编程三大特征之一。 简单的属性封装
package com.cqvie.Hello; class Person { private int age; private String name; public void tell() { ...
- Java学习:面向对象的三大特征:封装性、继承性、多态性之继承性
面向对象的三大特征:封装性.继承性.多态性. 继承 继承是多态的前提 ,如果没有继承,就没有多态. 继承主要解决的问题就是:共性抽取. 继承关系当中的特点: 子类可以拥有父类的“内容” 子类还可以拥有 ...
- 谈谈Java面向对象的三大特性
Java面向对象的三大特性就是指封装.继承.多态了. 一.封装: 概念:封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式. (举例:笔记本电脑就是一个封装体,Java语言中最小的封装体就是函数 ...
- Java虚拟机之垃圾回收详解一
Java虚拟机之垃圾回收详解一 Java技术和JVM(Java虚拟机) 一.Java技术概述: Java是一门编程语言,是一种计算平台,是SUN公司于1995年首次发布.它是Java程序的技术基础,这 ...
随机推荐
- RNN推导
http://www.cnblogs.com/YiXiaoZhou/p/6058890.html RNN求解过程推导与实现 RNN LSTM BPTT matlab code opencv code ...
- SQLAlchemy的查询操作Query
查询操作 查询子句使用session的.query()方法来获取Query查询对象.查询对象能够使用一些方法来对应一些查询子句,比如.order_by(),.limit(),.filter()等. 查 ...
- 设计模式之状态模式(State)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于怎样创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...
- 老毛桃winpe优盘启动系统个性修改全攻略.(全)
博主从05年开始接触计算机,不能说是高手也算个老菜了,当时装系统还是用蕃茄花园的光盘安装系统,后来在学校管理机房,哪台电脑坏了就硬盘对拷. 时到今日,重启系统的方法五花八门,其中使用最广的莫过于PE优 ...
- 第九讲_图像生成 Image Captioning
第九讲_图像生成 Image Captioning 生成式对抗网络 Generative Adversarial network 学习数据分布:概率密度函数估计+数据样本生成 生成式模型是共生关系,判 ...
- android wifi state and wifi ap state
/** * Wi-Fi is currently being disabled. The state will change to {@link #WIFI_STATE_DISABLED} if * ...
- gulp在ionic中的使用
简介 Gulp是一个基于流的自动化构建器. 安装 npm config set registry http://registry.npm.taobao.org ---最好用国内源 npm instal ...
- 用Visual C++ 2010 载入动态链接库三部曲(使用第三方库的一般方法)
以下以载入编译好的ACE动态链接库为例说明:这里如果你已经设置了环境变量ACE_ROOT ACE在VS2010下高速配置载入动态链接库三部曲:(这里如果你的ACE文件夹为E:\ACE_wrappers ...
- Swift----编程语言语法
1 简单介绍 今天凌晨Apple刚刚公布了Swift编程语言,本文从其公布的书籍<The Swift Programming Language>中摘录和提取而成.希望对各位的iOS&a ...
- C语言变长数组 struct中char data[0]的用法
版权声明:本文为博主原创文章,未经博主允许不得转载. 今天在看一段代码时出现了用结构体实现变长数组的写法,一开始因为忘记了这种技术,所以老觉得作者的源码有误,最后经过我深思之后,终于想起以前看过的用s ...