Java封装、继承整理
封装
3.1封装概念:
- 提高代码复用性
- 隐藏实现细节,对外访问提供公共接口
- 提高安全型
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) 让类与类之间产生了关系,提供了多态的前提
继承注意事项:
- Java中类只支持单继承,也就是说一个类只能有一个父类
- 多个类可以继承一个父类
- 多个继承是可以的,也就是说一个父类可以继承另外的父类
- 一个类是某个类父类的同时,也是另一个类的子类
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封装、继承整理的更多相关文章
- Java 封装 继承 多态
Java 继承 继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法 ...
- java封装继承以及多态(含代码)
封装 该露的露,该藏的藏 我们常需设计要追求,"高内聚,低耦合".高内聚就是类的内部数据操作细节自己完成.不允许外部干涉:低耦合:仅暴漏少量的方法给外部使用. 封装(数据的隐藏) ...
- java 封装多态继承
java 面向对象思想 封装多态继承 面向过程与面向对象 编程分为面向对象编程和面向对象编程,汇编,C语言是面向过程写代码,C++/Java是面向对象 其实面向过程和面向对象在本质都是一样写代码,然后 ...
- java面向对象(封装-继承-多态)
框架图 理解面向对象 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程强调的是功能行为 面向对象将功能封装进对象,强调具备了功能的对象. 面向对象是基于面向过程的. 面向对象的特点 ...
- java类的封装 继承 多态
1.猜数字小游戏 package cn.jiemoxiaodi_02; import java.util.Scanner; /** * 猜数字小游戏 * * @author huli * */ pub ...
- Java的继承、封装与多态
Java的继承.封装与多态 基本概念 面向对象OO(Object Oriented):把数据及对数据的操作方法放在一起,作为一个相互依存的整体,即对象. 对同类对象抽象出共性,即类. 比如人就是一个类 ...
- Java三大特性(封装,继承,多态)
Java中有三大特性,分别是封装继承多态,其理念十分抽象,并且是层层深入式的. 一.封装 概念:封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将抽象得到的数据 ...
- java四大特性理解(封装继承多态抽象)
封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的接口.面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治.封装的对象,这些对象通过一个受保护的接口访问其他对象.封装是一 ...
- 7、java封装、继承、聚合组合
1封装:封装的是属性,封:private 装:set.get‘ 可以看做将属性和get/set方法捆绑的过程. 优点:1.防止对封装数据的未经授权的访问,提高安全性.使用者只能通过事先预定好的方法来访 ...
- 乐字节Java|封装JavaBean、继承与权限修饰
本文继续讲Java封装.上一篇:乐字节Java|GC垃圾回收机制.package和import语句 这次讲述JavaBean.继承与权限修饰 一. 封装javaBean 封装(Encapsulatio ...
随机推荐
- How to write to an event log by using Visual C#
using System; using System.Diagnostics; namespace WriteToAnEventLog_csharp { /// Summary description ...
- 多校#5-1005-Instring-HDU5785-manacher+维护
寻找三元组(i,j,k),使得(i,j)(j,k)都是回文字串,其中i<=j<k. 可以发现,对于每一位i,只要预处理出来有多少个以i为右端的回文串和以i为左端的回文串.把那些串的另一端的 ...
- Outsider(HNOI2019)
这不是一篇退役记,因为NOIP2018之后就写完了. Day-1 清明时节雨纷纷. 最后的时光,应该是怎么样的呢? 是像水滴一样,悄无声息地从指缝中溜走 还是如火焰一般,燃烧着最后的留恋? 晚上一直在 ...
- 聊聊openjdk的BufferPoolMXBean
本文主要研究一下openjdk的BufferPoolMXBean PlatformManagedObjectjava.management/java/lang/management/PlatformM ...
- VSIX 插件右键菜单(2)
编译项目然后发布 // 获取当前右击的活动项目 EnvDTE.Project activeProj = ProjectHelpers.GetActiveProject(); // 获取 编译选项 Re ...
- 蓝桥杯试题 k倍区间(dp)
问题描述 给定一个长度为N的数列,A1, A2, ... AN,如果其中一段连续的子序列Ai, Ai+1, ... Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍区间. ...
- ACM-ICPC 2018 南京赛区网络预赛 J题Sum(线性筛素数)
题目链接:https://nanti.jisuanke.com/t/30999 参考自博客:https://kuangbin.github.io/2018/09/01/2018-ACM-ICPC-Na ...
- Nginx环境的搭建
源码安装 不同发行版使用的安装程序都不同,所以官方提供了源代码,我们需要将原代码编译后再安装. 源程序使用C语言开发,所以需要安装C语言的编译环境. 安装Nginx环境和第三方支持库 yum inst ...
- js定时器setInterval()与setTimeout()
js定时器setInterval()与setTimeout() 1.setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setT ...
- A1121. Damn Single
"Damn Single (单身狗)" is the Chinese nickname for someone who is being single. You are suppo ...