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; ...
随机推荐
- vue3.0wactch监听
<template> <div> <input v-model="count" /> </div> </template> ...
- HTML的标签认识
<!-- html标签 h1~h6 标题标签(只有1~6,依次减小) p 段落标签 span 无意义的行标签 div 无意义的块标签 b 加粗 ...
- Jib插件构建镜像push到阿里云镜像仓库
一.前言 Jib:Google开源的Java容器化工具 可作为插件快速集成到项目中,构建镜像,实现 Java 应用容器化 下面贴出一张从网上看到的Jib描述~ 二.利用Jib插件构建镜像push到阿里 ...
- 达梦关键字(如:XML,EXCHANGE,DOMAIN,link等)配置忽略
背景:在使用达梦数据库时,查询SQL中涉及XML,EXCHANGE,DOMAIN,link字段,在达梦中是关键字,SQL报关键词不能使用的错误. 解决办法: 配置达梦安装文件E:\MyJava\dmd ...
- php中 continue break exit return 的区别
php 中的循环有 for foreache while do{} whlie这几种. 1.continue continue是用来在循环结构中,控制程序放弃本次循环continue: 之后的语句,并 ...
- 百度杯 十二月 what_the_fuck
对于这道题,我还真的想说 what_the_fuck !! 这道题拿到就只发觉一个格式化字符串漏洞,其他的就找不到了 . unsigned __int64 sub_4008C5() { char s; ...
- Machine Learning In Action 第二章学习笔记: kNN算法
本文主要记录<Machine Learning In Action>中第二章的内容.书中以两个具体实例来介绍kNN(k nearest neighbors),分别是: 约会对象预测 手写数 ...
- 如何在VMware下通过挂载系统光盘搭建本地yum软件仓库
1.打开自己VMware软件中的虚拟机 2.输入用户名root密码登陆进去 3.打开 应用程序----收藏-----终端 4.首先回到根目录,输入cd ..(中间有空格) 5.创建一个名称为swlaa ...
- centOS7 可以ping通主机不能访问外网
前言: 突然打开自己前不久在虚拟机安装的centOS7系统,发现以前可以来联网突然不能访问外网,在网上看了很多方法,终于解决 问题描述: 连上网,但是ping 不同外网,如ping www.baodu ...
- Netty学习——Netty和Protobuf的整合(二)
Netty学习——Netty和Protobuf的整合(二) 这程序是有瑕疵的,解码器那里不通用,耦合性太强,有两个很明显的问题,但是要怎么解决呢?如:再加一个内部类型 Person2,之前的代码就不能 ...