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的三大特性之一,多态性是很多人都没有弄清楚的一个重要特性,今天我就来从我所理解的角度来说一下. 首先,从他的字面意思来理解,多态,从其字面来理解就是多种形态,多种表现形式.根据这些,我最能 ...
随机推荐
- Redis环境搭建
一.准备的安装包 windows虚拟机软件:VMware Workstation Pro 12 linux安装文件:CentOS-7-x86_64-Minimal-1511.iso 远程登录软件:pu ...
- C++ UI资源
最近又来搞界面了,现把这几天收集到的资料汇总下,方便今后慢慢学习! Duilib: Duilib是一个Windows下免费开源的DirectUI界面库,由于简约易扩展的设计以及稳定高效的实现被各大互联 ...
- 从json_encode过来的的字符串被返回到html页面时的解析
在工作过程中经常需要向服务器请求数据.在需要返回多个值的时候,使用json_encode处理数组然后返回是很常用的做法.如果没有指定返回数据类型的情况下,默认返回的是json格式的字符串.那么需要将这 ...
- HTML学习笔记 css定位浮动及瀑布流案例 第十三节 (原创) 参考使用表
#fd { width: 100px; height: 150px; background-color: forestgreen; float: left; } #sd { width: 150px; ...
- Problem B: 开个餐馆算算账
Description 小明创业了!他开了一家餐馆,每天客人还挺多的.每天下班后,他都要算算今天总共收入多少钱,但是手工算太麻烦了,所以他来向你求助了. Input 第1行N>0,表示餐馆提供N ...
- C#设计模式之十三代理模式(Proxy)【结构型】
一.引言 今天我们要讲[结构型]设计模式的第七个模式,也是"结构型"设计模式中的最后一个模式,该模式是[代理模式],英文名称是:Proxy Pattern.还是老套路,先从名字 ...
- iOS内置图片瘦身思路整理
一.前言 前段时间注意到我们APP的包大小超过100MB了,所以随口跟老板说了下能否采用字体文件(.ttf)替代PNG图片,老板对应用瘦身很感兴趣因此让我做下技术调研.这篇文章主要是将我们的各个技术方 ...
- linux下socket编程实例
linux下socket编程实例一.基本socket函数Linux系统是通过提供套接字(socket)来进行网络编程的.网络的socket数据传输是一种特殊的I/O,socket也是一种文件描述符.s ...
- (原创)遗传算法C++实现
本文没有对遗传算法的原理做过多的解释 基础知识可以参考下面的博客:http://blog.csdn.net/u010451580/article/details/51178225 本实验用到的变异用到 ...
- 阿里云ecs初始化磁盘后远程连接不到服务器
阿里云初始化磁盘后远程连接不到服务器 报错: WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! ... 原因:阿里云ecs第一次链接服务器之后会在本地电 ...