2.java三大特性
1. 封装
方法:将属性值修饰为私有,提供get和set方法。造成所有对对象的访问都是通过方法的调用来完成(配合this的使用)
结果:用户不能直接随意改变一个对象内的属性,必须通过调用方法(验证)来访问和修改
2. 面向对象三大特性:继承
关键字 extents
修饰符|使用范围 |继承与否
---|--:|---
Public| 公开使用 |可以继承|
Protected|在本类、同包其它类和子类、其它包的子类|可以继承
(default)|在本类、同包其它类|包的子类中可以 承
Private|在本类内部使用|不能被继承(实际被继承,无权访问)
注意:构造方法不
能被继承
继承的对象创建过程:
C extends B
B extends A
创建C 对象: //不考虑静态代码块,若有静态代码块,先通过递归的由基类到派生类加载代码块分配空间
初始化A的属性
调用A的构造方法
初始化B的属性
调用B的构造方法(默认调用A的构造,super())
初始化C的属性
调用C的构造方法(默认调用B的构造,super())
方法覆盖:
定义:子类用自己的方法实现替换掉能继承自父类的方法实现
要求:方法名相同、参数表相同、返回值类型相同、(访问修饰符相同或范围更广)
this关键字的使用
- 本身是引用,代表当前对象。在类中访问自己的属性和方法时,如果不加this,则自动默认this调用,当在局部方法内出现与类属性同名的局部变量时,如 加this表示类的成员变量,不加则代表是局部变量。
- 调用本类的无参构造方法
- this(…),调用本类中其他相应参数表的构造方法
注意:在使用this时,必须将this关键字放在构造方法内的第一行
Super关键字:
是个引用,指向父类的对象,用例调用父类的方法,super.父类方法( ),super须在方法内使用
可以用在构造方法内,指明调用父类的构造方法,用法和this相同。但必须放在构造函数的第一行,
例子:
class A {
public A(int i){}
}
class B extends A{
}
程序出错,系统默认为
class A {
public A(int i){}
}
class B extends A{
public B(){
super();
}
}
3. 面向对象三大特性:多态
没有继承就没有多态
Java实行的单继承
多态的开闭原则:(继承和多态)对修改关闭,对扩展开放
利用多态,可以使代码针对父亲展开编程,使代码更通用
多态的两种常见的应用场景:
把多态应用在方法的参数上:
m (A a) :方法可以接受A类,也可以接受A的子类对象
把多态应用在方法的返回值类型上:
A m() :方法返回的可以是A类或A类的某个子类对象
例子:父类对象引用子类对象,以方便扩展新的子类而不需改变方法代码:
例子1:
public class test {
public static void main(String[] args) {
Animal dog = new Dog();
Animal cat = new Cat();
eats(dog);
eats(cat);
}
static void eats(Animal animal){
animal.eat();
}
}
class Animal {
public void eat(){
System.out.println("吃的方法");
}
}
class Dog extends Animal {
public void eat(){
System.out.println("狗吃骨头");
}
}
class Cat extends Animal{
public void eat(){
System.out.println("猫吃小鱼");
}
}
例子2
public class ExcEmployee{
public static void main(String[] args){
Employee[] es = new Employee[4];
es[0] = new ProductEmployee("Yangdd",31);
es[1] = new SalesEmployee("Wucj",36);
es[2] = new ManageEmployee("Xusy",29);
es[3] = new CeoEmployee("Huxz" , 16);
for(int i = 0 ; i <es.length ; i++){
es[i].work();
}
double result = 0 ;
int count = 0;
for(int i = 0 ; i < es.length ; i++){
if (es[i] instanceof ManageEmployee){
count++;
result+=es[i].getAge();
}
}
System.out.println(result/count); //平均年龄
}
}
class Employee{
private String name;
private int age;
public Employee(){}
public Employee(String name){this.name = name;}
public Employee(String name , int age){ this(name);this.age = age;}
public int getAge(){ return age;}
public void setAge(int age){this.age=age;}
public void work(){ }
}
class ProductEmployee extends Employee{
public ProductEmployee(String name , int age){super(name,age);}
public void work(){ System.out.println("在车间劳动");}
}
class SalesEmployee extends Employee{
public SalesEmployee(String name , int age){super(name,age);}
public void work(){ System.out.println("出差跑客户");}
}
class ManageEmployee extends Employee{
public ManageEmployee(String name , int age){super(name,age);}
public void work(){ System.out.println("在办公室斗地主");}
}
class CeoEmployee extends ManageEmployee{
public CeoEmployee(String name , int age){ super(name,age);}
public void work(){ System.out.println("在会议室开会");}
}
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的三大特性之一,多态性是很多人都没有弄清楚的一个重要特性,今天我就来从我所理解的角度来说一下. 首先,从他的字面意思来理解,多态,从其字面来理解就是多种形态,多种表现形式.根据这些,我最能 ...
- Java 三大特性
一.Java第一大特性:封装 封装:将属性私有化,提供共有方法访问私有属性,实现细节隐藏,并且程序也更加容易维护. class Dish { private final String name; ...
随机推荐
- ArcGIS Desktop10.4安装教程
准备内容 安装环境:win10*64位专业版 安装文件:ArcGIS_Desktop_1041_150996.iso 破解文件:10.4.1crackOnly 请都以管理员身份运行安装程序 安装步骤 ...
- Hadoop之HDFS文件系统(二)
HDFS客户端 通过IO流操作HDFS HDFS文件上传 @Test public void putFileToHDFS() throws Exception{ // 1 创建配置信息对象 Confi ...
- 【集训Day3 离散化】矩形覆盖
矩形覆盖(planting) [问题描述] 给定在一个平面坐标系上的N(1 <= N <= 100)个矩形区域,这N个矩形可能有相互覆盖的部分.求平面上被所有矩形覆盖的总面积,重复部分只算 ...
- MySQL 、PDO对象
目录 1, singleton 2, pdo与db 3, singleton获取pdo 4, pdo实现db增删改查 5, pdo异常处理exception 6, pdo预处理prepare 7, p ...
- 防范XSS攻击
原文链接:http://www.cnblogs.com/chenty/p/5136834.html 最近,有个项目突然接到总部的安全漏洞报告,查看后知道是XSS攻击. 问题描述: 在页面上有个隐藏域: ...
- Linux的awk命令详解
awkawk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,默认以空格为分隔符将每行切片,切开的部分再 ...
- P1035 级数求和
题目描述 已知:S_n= 1+1/2+1/3+…+1/nSn=1+1/2+1/3+…+1/n.显然对于任意一个整数KK,当nn足够大的时候,S_nSn大于KK. 现给出一个整数KK(1 \le k ...
- c语言I博客专业06
问题 答案 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-2/homework/8655 我在 ...
- num += num 与 num = num+ num
a = 100def test(num): num += num print(num) test(a)print(a) 200100 这里 num += num 与 num = num+ num 不能 ...
- PTA 1140 1141 1142 1143
1140 Look-and-say Sequence 思路:模拟 #include<bits/stdc++.h> using namespace std; typedef long lon ...