封装

3.1封装概念:

  1. 提高代码复用性
  2. 隐藏实现细节,对外访问提供公共接口
  3. 提高安全型

3.2封装举例

机箱就是隐藏实现细节,提供了公共的访问接口

3.3私有private

一般对成员属性的访问动作:赋值(设置 set),取值(获取 get),因此对私有的变量访问的方式可以提供对应的 setXxx或者getXxx的方法。

package com.oracle.demo02;

public class Person {

//私有的成员变量

private String name;

private int age;

//对外提供公共的赋值接口

public void setName(String n){

name=n;

}

//对外提供公共的取值接口

public String getName(){

return name;

}

public void setAge(int a){

if(a>=0||a<=130){

age=a;

}else{

age=0;

}

}

public int getAge(){

return age;

}

//对外提供访问成员变量的方法

public void speak(){

System.out.println("我叫"+name+",今年"+age+"岁了");

}

}

测试类:

package com.oracle.demo02;

public class Demo01 {

public static void main(String[] args) {

//创建Person类

Person p=new Person();

//用set方法给Name、Age属性赋值

p.setName("欣欣");

p.setAge(16);

//调用成员变量方法

p.speak();

}

}

运行结果:

3.4this.关键字

3.41成员变量和局部变量同名问题

注意:可以在成员变量名前面加上this.来区别成员变量和局部变量

package com.oracle.demo02;

public class Person {

//私有的成员变量

private String name;

private int age;

public void speak() {

this.name = "欣欣";

this.age = 18;

System.out.println("名字:" + this.name + ",年龄" + this.age);

}

}

测试类:

package com.oracle.demo02;

public class Demo01 {

public static void main(String[] args) {

//创建Person类

Person p=new Person();

p.speak();//调用speak方法

}

}

运行结果:

3.42对象的内存解释

package com.oracle.demo03;

public class Person {

private String name;

private int age;

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public void speak(){

System.out.println(age);

}

}

测试类:

package com.oracle.demo03;

public class Test {

public static void main(String[] args) {

Demo01 d=new Demo01();

d.setAge(16);

d.speak();

}

}

运行结果:

3.43this的应用

举例:判断两个人是否是同龄人

package com.oracle.demo02;

public class Student {

private String name;

private int age;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public boolean compare(Student stu){

return  this.age==stu.age;

}

}

测试类:

package com.oracle.demo02;

public class Demo02 {

public static void main(String[] args) {

//在student 类中写一个方法

//判断两个学生是否是同龄人

// 返回值:boolean  参数:student stu

Student s1=new Student();

s1.setName("花花");

s1.setAge(16);

Student s2=new Student();

s2.setName("欣欣");

s2.setAge(24);

boolean flag=s1.compare(s2);

System.out.println(flag);

}

}

继承(extends)

4.1继承的概念:

现实生活中,继承一般指的是子女继承父辈的财产

程序中,继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类被称作子类,现有类被称作父类,子类会自动拥有父类所有可继承的属性和方法。

4.2继承的格式和使用

格式:

Class 子类 extends 父类{}

父类:

package com.oracle.demo03;

public class Employee {

//定义属性

String name;

//定成员义方法

public void work(){

System.out.println("正在打王者荣耀");

}

}

子类:继承父类的方法

package com.oracle.demo03;

public class Developer extends Employee {

//继承父类的方法

//子类独有的方法

public void speak(){

System.out.println("名字为:"+name);

}

}

测试类:

package com.oracle.demo03;

public class Test01 {

public static void main(String[] args) {

//创建对象

Developer d=new Developer();

d.name="欣欣";

d.speak();//调用子类方法

d.work();//调用父类的方法

}

}

运行结果:

4.3继承的好处和注意事项

继承的好处:

1)         提高了代码的复用型,提高软件的开发效率

2)         让类与类之间产生了关系,提供了多态的前提

继承注意事项:

  1. Java中类只支持单继承,也就是说一个类只能有一个父类
  2. 多个类可以继承一个父类
  3. 多个继承是可以的,也就是说一个父类可以继承另外的父类
  4. 一个类是某个类父类的同时,也是另一个类的子类

4.4子父类成员变量的特点

成员变量:

如果子类父类中出现不同名的变量,这时访问是没有任何问题的

父类:

package com.oracle.demo02;

public class Fu {

//父类中的成员变量

int num=4;

}

package com.oracle.demo02;

子类:

public class Zi extends Fu{

//子类中的成员变量

int num=5;

public void show(){

//调用父类用super

System.out.println("父类方法:"+super.num);//打印父类中的num变量

//调用类本身用this

System.out.println("子类方法:"+this.num);//打印子类中的num变量

}

}

测试类:

package com.oracle.demo02;

public class Test {

public static void main(String[] args) {

//创建子类对象

Zi z=new Zi();

//调用子类方法

z.show();

}

}

运行结果:

4.5继承-子父类中成员方法特点-重写&应用

子类中成员方法的特点:

程序在通过方法调用时,会先在子类中查找有没有对应的方法,若子类中存在就会执行子类方法,若子类方法中不存在方法就执行父类的方法

package com.oracle.demo06;

public class Fu {

//父类成员方法

public void show(){

System.out.println("这是父类的方法");

}

}

package com.oracle.demo06;

public class Zi extends Fu{

//子类成员方法

public void speak(){

System.out.println("这是子类的方法");

}

}

测试类:

package com.oracle.demo06;

public class Text {

public static void main(String[] args) {

//创建子类对象

Zi z=new Zi();

//调用子类中show方法,执行父类方法

z.show();

//调用子类方法

z.speak();

}

}

运行结果:

成员方法特殊情况一一覆盖

子类中出现与父类一模一样的方法时,会出现覆盖操作,也叫重写、复写、覆盖、override

package com.oracle.demo06;

public class Fu {

//父类成员方法

public void speak(){

System.out.println("这是父类的方法");

}

}

package com.oracle.demo06;

public class Zi extends Fu{

//子类重写父类的show方法

public void speak(){

System.out.println("这是子类的方法");

}

}

4.6方法重写的注意事项

子类方法覆盖父类方法,必须要保证权限大于等于父类权限

总结:

当一个类是另一个类中的一种时,可以通过继承,来继承属性与功能。如果父类具备的功能内容需要子类特殊定义时,进行方法的重写

Java封装、继承整理的更多相关文章

  1. Java 封装 继承 多态

    Java 继承 继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法 ...

  2. java封装继承以及多态(含代码)

    封装 该露的露,该藏的藏 我们常需设计要追求,"高内聚,低耦合".高内聚就是类的内部数据操作细节自己完成.不允许外部干涉:低耦合:仅暴漏少量的方法给外部使用. 封装(数据的隐藏) ...

  3. java 封装多态继承

    java 面向对象思想 封装多态继承 面向过程与面向对象 编程分为面向对象编程和面向对象编程,汇编,C语言是面向过程写代码,C++/Java是面向对象 其实面向过程和面向对象在本质都是一样写代码,然后 ...

  4. java面向对象(封装-继承-多态)

    框架图 理解面向对象 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程强调的是功能行为 面向对象将功能封装进对象,强调具备了功能的对象. 面向对象是基于面向过程的. 面向对象的特点 ...

  5. java类的封装 继承 多态

    1.猜数字小游戏 package cn.jiemoxiaodi_02; import java.util.Scanner; /** * 猜数字小游戏 * * @author huli * */ pub ...

  6. Java的继承、封装与多态

    Java的继承.封装与多态 基本概念 面向对象OO(Object Oriented):把数据及对数据的操作方法放在一起,作为一个相互依存的整体,即对象. 对同类对象抽象出共性,即类. 比如人就是一个类 ...

  7. Java三大特性(封装,继承,多态)

    Java中有三大特性,分别是封装继承多态,其理念十分抽象,并且是层层深入式的. 一.封装 概念:封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将抽象得到的数据 ...

  8. java四大特性理解(封装继承多态抽象)

    封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的接口.面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治.封装的对象,这些对象通过一个受保护的接口访问其他对象.封装是一 ...

  9. 7、java封装、继承、聚合组合

    1封装:封装的是属性,封:private 装:set.get‘ 可以看做将属性和get/set方法捆绑的过程. 优点:1.防止对封装数据的未经授权的访问,提高安全性.使用者只能通过事先预定好的方法来访 ...

  10. 乐字节Java|封装JavaBean、继承与权限修饰

    本文继续讲Java封装.上一篇:乐字节Java|GC垃圾回收机制.package和import语句 这次讲述JavaBean.继承与权限修饰 一. 封装javaBean 封装(Encapsulatio ...

随机推荐

  1. React 学习(三) ---- state 和 事件处理函数

    在上两节中,我们讲述了props, 组件使用props进行渲染,但是这是一次性的, props渲染完成之后就不做任何事情了,但是现实中却不是这样的,当我们点击购物车上的加减按钮时,数量会自动加1或减1 ...

  2. [离散时间信号处理学习笔记] 10. z变换与LTI系统

    我们前面讨论了z变换,其实也是为了利用z变换分析LTI系统. 利用z变换得到LTI系统的单位脉冲响应 对于用差分方程描述的LTI系统而言,z变换将十分有用.有如下形式的差分方程: $\displays ...

  3. codeforces1045B Space Isaac 【manacher】【差分】

    题目大意: 题目是将$[0,m)$的数划成了两个集合,其中一个集合的元素个数不超过$n$.问在第一个集合中选出的数加上第二个集合中选出的数的和中没有出现的数有哪些. 题目分析: 很有意思的一道题.方便 ...

  4. Visible Trees HDU - 2841

    Visible Trees Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  5. Ionic3的http请求如何实现token验证,并且超时返回登录页

    要求 后台提供的接口,不能让人随便输入个链接就能访问,而是要加入一个token,token是动态的,每次访问的时候判断,有权限并且未过期的时候才可以访问接口. 后台的设计是 在登录的时候,首先要pos ...

  6. MySQL 报错 1055

    具体报错 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'exer.student.sid' w ...

  7. 后台CRUD管理jqGrid 插件下载、使用、demo演示

    jqGrid:demo?version=5.2.1download src: http://www.trirand.com/blog/ github:https://github.com/tonyto ...

  8. 【刷题】LOJ 556 「Antileaf's Round」咱们去烧菜吧

    题目描述 你有 \(m\) 种物品,第 \(i\) 种物品的大小为 \(a_i\) ​,数量为 \(b_i\)​( \(b_i=0\) 表示有无限个). 你还有 \(n\) 个背包,体积分别为 \(1 ...

  9. Java复习总结——数据类型

    包装类型 八个基本类型: Boolean/boolean/1 Byte/byte/8 Character/char/16 Short/short/16 Integer/int/32 Float/flo ...

  10. 洛谷P1020 导弹拦截

    n²谁都会打,不说了. 这里讨论一下nlogn算法(单调不减): 首先开始考虑单调性,我习惯性的以为是单调队列/栈优化的那个套路,想要找到一个跟下标有关的单调性却发现没有. 例如:我想过当下标增加时f ...