Java 三大特性
一、Java第一大特性:封装
封装:将属性私有化,提供共有方法访问私有属性,实现细节隐藏,并且程序也更加容易维护。
class Dish { private final String name; private final boolean vegetarian; private final int calories; public Dish(String name,boolean vegetarian,int calories){ this.name=name; this.vegetarian=vegetarian; this.calories=calories; } public boolean isVegetarian() { return vegetarian; } public int getCalories() { return calories; } public String getName() { return name; } public String toString() { return name; } } public class App { public static void main( String[] args ) { List<Dish> menu = Arrays.asList( new Dish("pork",false,800), new Dish("beef",false,700), new Dish("pizza",true,300), new Dish("chicken",true,500) ); List<String> high= menu.stream() .filter(a->a.getCalories()>400) .filter(d->d.getName().contains("ke")) .map(Dish::getName) .limit(2) .collect(toList()); System.out.println(high); } }
上述代码中,在类Dish中声明了属性name、vegetarian和calorie,修饰符为private和final。这说明这三个参数对其他类是不可见的,其他类要想访问Dish类的属性,必须要通过Dish类的共有方法访问Dish类的私有属性,比如外部可以通过getName()方法访问Dish的name属性。
二、Java第二大特性:继承
继承:根据已有的类创建新类,重用父类代码
三、Java第三大特性:多态
1.多态:在程序中定义的引用变量所指向的具体类型和通过该引用发出的方法调用在程序运行时才确定。由于在程序运行期间才确定具体的类和方法,因此可以动态的决定引用变量调用的类和方法,让程序选择多种运行状态。这就是多态性。
2.多态的实现
2.1 Java 实现多态有三个必要条件
继承:必须存在有继承关系的子类和父类
重写:子类对父类的方法进行重新定义
需要注意的是,重写后子类和父类的对应函数名称是一致的,只是具体方法有所变化。但是重载后却是不同的函数,比如父类函数A(),重载后为A(int),这两个函数为不同的 函数
向上转型:(1)将子类对象赋给父类引用,比如 父类A a=new 子类B();引用类型a指向B类型的对象,由于B是继承A的,因此new B()自动转型为A,即a指向B类实例对象(可以认 将子类对象转为父类对象),因此子类对象B可以调用父类的方法。如果子类重写了父类的方法,那么会调用子类的方法。
(2)向上转型是安全的:向上转型会丢失子类比父类多出的方法,即使子类中方法f(int)是重载父类的f(),向上转型后仍然会丢失f(int)方法。
2.2 Java实现多态的形式
(1)基于继承实现的多态:主要利用了子类对父类方法的重写(注意和重载的区别,上文已提到)
public class Wine { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public Wine(){ } public String drink(){ return "喝的是 " + getName(); } /** * 重写toString() */ public String toString(){ return null; } } public class JNC extends Wine{ public JNC(){ setName("JNC"); } /** * 重写父类方法,实现多态 */ public String drink(){ return "喝的是 " + getName(); } /** * 重写toString() */ public String toString(){ return "Wine : " + getName(); } } public class Test { public static void main(String[] args) { Wine jnc = new JNC(); System.out.println(wines[i].toString() + "--" + wines[i].drink()); } } OUTPUT: Wine : JNC--喝的是 JNC
在上面的代码中(来自某位大神博客),子类重写了父类的toString()和drink()方法(???),因此jnc调用了子类的方法。这就是多态性。
(2)基于接口实现的多态
继承关系中,子类只允许有一个父类,父类可以有多个子类。
接口实现中,一个类可以实现多个接口。因此,接口实现比继承更加灵活。
Java 三大特性的更多相关文章
- Java 三大特性——封装、继承、多态
一.封装 封装,实际就是把属于同一类事物的共性(包括属性与方法)归到一个类中,以方便使用. 概念:在面向对象程式设计方法中,封装(英语:Encapsulation)是指,一种将抽象性函式接口的实作细节 ...
- JAVA三大特性之多态
面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 多态的定义:指允许不同类的对象对同一消息做出响应.即同一消息可以根据 ...
- JAVA三大特性之一——封装
自学java已经有一段时间了,但是感觉对于很多知识点还是有必要总结和整理一下,下面我就来说一下我对JAVA三大特性之一——封装特性的认识和理解. 封装,从字面意思可以看出来,就是包装,也就是把我们写好 ...
- JAVA基础第二章-java三大特性:封装、继承、多态
业内经常说的一句话是不要重复造轮子,但是有时候,只有自己造一个轮子了,才会深刻明白什么样的轮子适合山路,什么样的轮子适合平地! 我将会持续更新java基础知识,欢迎关注. 往期章节: JAVA基础第一 ...
- Java三大特性
Java 三大特性,算是Java独特的表现,提到Java 的三大特性, 我们都会想到封装, 继承和多态 这是我们Java 最重要的特性. 封装(Encapsulation) : 封装:是指隐藏对象的属 ...
- java三大特性:封装、继承、多态
Java三大特性之封装 一.定义 封装性指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部的信息,而是通过该类所提供的方法来实现对内部信息的操作和访问. 二.使用封装的好处: 1 ...
- 浅谈Java三大特性
Java三大特性想必大家都不陌生:封装.继承以及多态.很多刚接触Java的小伙伴都会想,它们到底有什么了不得之处,又赋予Java这门编程语言什么魔力呢?今天我们来探讨一下吧~~ 首先,名词解释: 封装 ...
- 浅析Java三大特性封装、继承、多态,及作业分析
前言 本次博客衔接上次博客,作为这一阶段Java学习的分析.上一篇博客着重介绍了Java的OO编程思维,面向对象与面向过程的区别.本篇博客重心在Java的三大技术特性,附带作业分析. Java三大特性 ...
- JAVA三大特性之三——多态
作为JAVA的三大特性之一,多态性是很多人都没有弄清楚的一个重要特性,今天我就来从我所理解的角度来说一下. 首先,从他的字面意思来理解,多态,从其字面来理解就是多种形态,多种表现形式.根据这些,我最能 ...
随机推荐
- 重写equals和hashCode
equals()方法 1. 自反性:A.equals(A)要返回true. 2. 对称性:如果A.equals(B)返回true, 则B.equals(A)也要返回true. 3. 传递性:如果A.e ...
- LeetCode 533. Lonely Pixel II (孤独的像素之二) $
Given a picture consisting of black and white pixels, and a positive integer N, find the number of b ...
- win8在安装office visio2003出现“请求的操作需要提升”,解决方法
单击右键,然后以管理员身份运行即可
- Windows环境下多线程编程原理与应用读书笔记(2)————面向对象技术
面向对象技术是学C++需要重点掌握的知识,因为我觉得自己的基础还是比较可以,这一章节的内容就只是粗略的读了一遍,在此就不做过多的笔记.
- HDU X mod f(x)(题解注释)
X mod f(x) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- sql脚本
Windows下执行命令 \. d:\book.sql 这里使用了case when 这个小技巧来实现批量更新.//一个字段 UPDATE categories SET display_or ...
- JavaScript instanceof 运算符深入剖析【转载】
http://www.ibm.com/developerworks/cn/web/1306_jiangjj_jsinstanceof/ instanceof 运算符简介 在 JavaScript ...
- 如何优雅的设计 React 组件
作者:晓冬 本文原创,转载请注明作者及出处 如今的 Web 前端已被 React.Vue 和 Angular 三分天下,一统江山十几年的 jQuery 显然已经很难满足现在的开发模式.那么,为什么大家 ...
- 根据矩阵变化实现基于 HTML5 的 WebGL 3D 自动布局
在数学中,矩阵是以行和列排列的数字,符号或表达式的矩形阵列,任何矩阵都可以通过相关字段的标量乘以元素.矩阵的主要应用是表示线性变换,即f(x)= 4 x等线性函数的推广.例如,旋转的载体在三维空间是一 ...
- 运放的PID电路
PID就是(比例(proportion).积分(integral).导数(derivative)),在工程实际中,应用最为广泛的调节器控制规律为比例.积分.微分控制,简称PID控制,又称PID调节. ...