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的三大特性之一,多态性是很多人都没有弄清楚的一个重要特性,今天我就来从我所理解的角度来说一下. 首先,从他的字面意思来理解,多态,从其字面来理解就是多种形态,多种表现形式.根据这些,我最能 ...
随机推荐
- LeetCode Questions List (LeetCode 问题列表)- Java Solutions
因为在开始写这个博客之前,已经刷了100题了,所以现在还是有很多题目没有加进来,为了方便查找哪些没加进来,先列一个表可以比较清楚的查看,也方便给大家查找.如果有哪些题目的链接有错误,请大家留言和谅解, ...
- css中居中方法小结
---恢复内容开始--- 1.文字垂直居中 .header_nav-item{ height:38px; line-height:38px; } 即文字所在模块的高度和行高设置成一样的! 2.块元素垂 ...
- Django1.11搭建一个简易上传显示图片的后台
本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃 项目展示需要,之前没研究过Django,网上查资料快速做了一个后台,写下了防止自己忘了. p ...
- JS框架设计读书笔记之-核心模块
随笔记录一下读书心得 1. 框架模块-核心模块 该模块是框架最先执行的部分,jQuery与vue中都有初始化的代码. 模块的功能主要是:对象扩展.数组化.类型判定.事件绑定和解绑.无冲突处理.模块加载 ...
- 本地存储之localStorage
localStorage 本地存储 .对象.存数据 .取数据 存储的数据量在20M左右 localStorage 是window下面的属性,用的时候可以省略window 数据只能存储字符串类型的 lo ...
- code forces 439 C. The Intriguing Obsession
C. The Intriguing Obsession time limit per test 1 second memory limit per test 256 megabytes input s ...
- Python入门学习(一)
看完了莫烦Python的视频,对于Python有了一点感觉,接下来打算把小甲鱼的视频啃完,附上学习网址:http://blog.fishc.com/category/python 小甲鱼的视频是从零基 ...
- 【转】解决memcached启动失败
原文:http://chenzhou123520.iteye.com/blog/1925196 linux上启动Memcache报错: 原因一般有两个, 一个是操作系统里确实没有包含该共享库(lib* ...
- Spring ioc与aop的理解
一 spring的特点 1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦 2.可以使用容易提供的众多服务,如事务管理,消息服务等 3.容器提供单例模式支持 4.容器提供了AOP技术,利用它很容易 ...
- 前后端分手大师——MVVM 模式
之前对 MVVM 模式一直只是模模糊糊的认识,正所谓没有实践就没有发言权,通过这两年对 Vue 框架的深入学习和项目实践,终于可以装B了有了拨开云雾见月明的感觉. 简而言之 Model–View–Vi ...