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的三大特性之一,多态性是很多人都没有弄清楚的一个重要特性,今天我就来从我所理解的角度来说一下. 首先,从他的字面意思来理解,多态,从其字面来理解就是多种形态,多种表现形式.根据这些,我最能 ...
随机推荐
- Judge Route Circle --判断圆路线
Initially, there is a Robot at position (0, 0). Given a sequence of its moves, judge if this robot m ...
- Linux上安装二进制文件MySQL详解
前言:昨天晚上搞了很久,终于搞清楚mysql的安装配置了,我真是太low了.当我在云服务器上登进Mysql时,真是高兴哈哈,咱一步一步来,彻底搞懂Mysql的安装配置. 我的安装环境: 阿里云服务器 ...
- 用Unity3d做游戏(一)
准备工作: vs2013,直接从官网下载或者这里 http://pan.baidu.com/s/1bFxC54 unity3d,从官网下载,版本4或者5 https://unity3d.com/c ...
- spark的sparkUI如何解读?
spark的sparkUI如何解读? 以spark2.1.4来做例子 Job - schedule mode 进入之后默认是进入spark job 页面 这个说明有很详细的解释,spark有两种操作算 ...
- Asp.net Api中使用OAuth2.0实现“客户端验证”
一.实现继承自OAuthAuthorizationServerProvider的类,实现以"客户端验证"方式传入的相关认证和access_token发放. public class ...
- Java调用C++类库--JNI
JNI是Java平台中的一个重要的功能,这里我把我做的Demo总结一下,分享一下,我会把每个步骤尽量的详细的展现出来. 这里我就不讲解JNI的原理了,google,百度一下,到处都是 好了,直接来讲步 ...
- 一个简易内存池(C++)
做这个内存池主要是为了完成一道面试题,题目在代码中. 代码 #include <iostream> #include<string> #include <list> ...
- Brave Game(裸的巴什博弈)
Brave Game Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...
- vue小项目---管理系统
在上一篇文章中我们已经学习了vue的基本语法,常用属性,了解了vue的基本使用,现在让我们用vue配合Bootstrap来完成一个小项目. 首先导入Bootstap文件. <link rel=& ...
- git使用教程之了解git
1.理解git快照 快照的作用就相当于将旧文件所占的空间保留下来,并且保存一个引用,而新文件中会继续使用与旧文件内容相同部分的磁盘空间,不同部分则写入新的磁盘空间.git有一个HEAD指针,这个指针可 ...