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 531. Longly Pixel I (孤独的像素之一) $
Given a picture consisting of black and white pixels, find the number of black lonely pixels. The pi ...
- eclipse中project facet问题
一般出现在从别处import的项目上,只有项目文件夹上有红叉,其他地方都正常,现总结个人的几个解决方案: 有几种可能: 1,编码设置是否一致,也即是你项目原来的编码和现在eclipse用的默认编码是否 ...
- Java基础笔记1
java (开源,跨操作系统)j2ee jre java基础 javaoop java高级 JDK(JAVA developer Kitool): java开发工具 (开发人员使用) JRE(java ...
- input file选择图片后 预览
很多前端都选择用插件来实现图片预览,这个小功能也可以很简单的用jQuery来实现 简单的jQuery实现input file选择图片后,可以预览图片的效果 简单的HTML代码: <div> ...
- VS2008生成DLL并使用
1.创建工程 2.在工程中添加类,创建.h和.cpp文件 //.h代码 /** 请注意此代码方法声明中的 __declspec(dllexport) 修饰符. 这些修饰符使 DLL 能够导出该方法以供 ...
- rsync远程数据同步工具的使用
准备工作 虚拟机1: 192.168.24.41, 用于搭建rsync服务器 虚拟机2: 192.168.26.68, 用于搭建rsync客户端 虚拟机1和虚拟机2均为centos7; 1. 检查虚拟 ...
- 行内脚本的位置放置----css阻塞行内脚本
行内脚本:避免放置在css和其他资源之间. 若在head中,最好放在css样式表之前,如果放置在样式表之后,会引起css阻塞. css阻塞:由于浏览器要保证css和JavaScript的执行顺序,cs ...
- Java面试常会被问到的经典面试题,学习或者求职,你都要好好掌握
Java现在的热度虽然有所下降,但是,学Java的人依旧很多..Java的岗位也是渗透很多.那么,那些经典的Java知识点,你能看到问题就能说出一二三吗?来一起看看.. 1.JDK和JRE的区别 2. ...
- SQL中锁表语句简单理解(针对于一个表)
锁定数据库的一个表 复制代码代码如下: SELECT * FROM table WITH (HOLDLOCK) 注意: 锁定数据库的一个表的区别 复制代码代码如下: SELECT * FROM tab ...
- 初生牛犊不怕虎 golang入坑系列
读前必读,下面所有内容都是来自这里. 放到这里的目的,就是为了比对一下,哪里的读者多.平心而论,同样的Markdown,博客园排版真心X看,怎么瞅怎么X看.(X := '难' || X :='耐' | ...