封装

把数据包装起来,给你能看的,不能看的包装起来不让你看

该露的露,该藏的藏

程序设计要求“高内聚,低耦合”。

高内聚指类的内部数据操作细节自己完成,不允许外部干涉;

低耦合指仅暴露少的方法给外部使用

属性私有,get/set

有时set中会做一些安全性的验证或判断

封装(数据的隐藏)

通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息隐藏

package com.zhang.oop.demo04;
//private 私有
public class Student {
//属性私有
private String name;
private int id;
private char sex;
private int age; //此时new了对象,属性也无法直接操作,要用get/set提供一些可以操作这个属性的方法
//要用一些public的get、set方法
//get 获得这个数据
public String getName(){//这样就可以把name获取到了
return this.name;
}
//set 给这个数据设置值
public void setName(String name){//形式参数
this.name=name;
}
//alt+insert 可以自动生成get set方法 public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public char getSex() {
return sex;
} public void setSex(char sex) {
this.sex = sex;
} public int getAge() {
return age;
} public void setAge(int age) {
if(age>120||age<0){
this.age = 3;
}else {
this.age = age;
}
}
} /*
package com.zhang.oop.demo04;
import com.zhang.oop.demo04.Student; //一个项目应该只存在一个main方法 封装的意义:
1.提高程序的安全性,保护数据
2.隐藏代码的实现细节
3.统一接口
4.提高系统的可维护性 public class Application {//总的测试类 public static void main(String[] args) {
//new实例化了一个对象
Student s1=new Student();
//此处此时若用s1.name="旺财";会报错,但用public不会报错,但是可以通过getName的方式获取name
//String name =s1.getName();
s1.setName("zhang");
System.out.println(s1.getName()); s1.setAge(999);//这样的年龄不合法,可以在get set方法中规避掉
System.out.println(s1.getAge());
}
}
//以对象的形式封装数据 //实例
*/

继承

继承的本质是对类的抽象,从而实现对现实世界更好的建模

extends:扩展。子类是父类的扩展。

子类继承父类,使用关键字extends来表达

子类和父类之间,从意义上讲应该具有“is a ”的关系

java中类只有单继承,无多继承(子类只有一个父类,但父类可以有多个子类)

继承是类更类间的关系,除此之外,类与类间的关系还有依赖、组合、聚合等

package com.zhang.oop.demo05;
//person 父类
//java中,所以的类都直接或间接的继承object类
public class Person {
//public
//protected
//default :若不写任何修饰符,默认为这个 几个修饰符
//private
//public int money=10_0000_0000;若此处用publi可直接操作
private int money=10_0000_0000;//但当用成public,不可直接操作,需按方法操作get、set
public void say(){
System.out.println("说了一句话");
} public int getMoney() {
return money;
} public void setMoney(int money) {
this.money = money;
}
} /*
package com.zhang.oop.demo05;
//学生是人,父类:人;子类(也叫派生类):学生、老师。
public class Student extends Person {
//子类可以继承父类的所有方法
//子类继承父类就会拥有父类的全部方法,前提是父类person中的修饰符为public,若改为private就不行了
//ctrl+h 可以在右侧显示出所写的继承关系
} package com.zhang.oop; import com.zhang.oop.demo05.Student; public class Application {
public static void main(String[] args) {
Student student=new Student();
student.say();
//System.out.println(student.money);
System.out.println(student.getMoney());
}
} */

super

super和this

super的注意点:

  1. super可以用来调用父类的构造方法,且位置必须处在子类代码构造器的第一个
  2. super必须且只能出现在子类的方法或构造方法中
  3. super和this不能同时调用构造方法

super和this的区别

  1. 代表的对象不同

this代表本身调用者这个对象(谁调用了他就是谁)

super代表父类对象的引用

  1. 使用前提不一样

this:this这个关键字可以直接使用,在没有继承的情况下也可以使用

super:只能在继承条件下才可以使用

  1. 调用构造方法不一样

this();调用的是本类的构造方法

super();调用的是父类的构造方法

package com.zhang.oop;

import com.zhang.oop.demo06.Person;
import com.zhang.oop.demo06.Student; public class Application {
public static void main(String[] args) { Student student=new Student();
//student.test("张三");
// student.test1(); } }
/*
package com.zhang.oop.demo06; public class Person {
//无参构造器 public Person(String name){
System.out.println("Person无参构造执行了");
//若把此处改为有参构造,即:public Person(String name){},因为只要你写了有参构造,无参构造就没了,此时在子类Student中隐藏的代码会报错:'Person(java.lang.String)' in 'com.zhang.oop.demo06.Person' cannot be applied to '()',此时调用父类的无参出错,但你调用父类的有参是可以的,即给super加上参数:super(”name“)
// 所以,只要重写了有参,就先把无参构造加上
} protected String name="zhang";
public void print(){//如此处public改为private,会出错:私有的属性无法继承 System.out.println("person"); }
} package com.zhang.oop.demo06; public class Student extends Person {
//子类也来一个构造器 public Student() {
//new Student最后输出的结果是:Person无参构造执行了
// Student无参构造执行了
//new 的是Student,本不应该有Person这句话,有说明这里有隐藏代码,默认的调用了父类Person的无参构造器
super("name");//这行就是隐藏的代码
System.out.println("Student无参构造执行了");
//super(); 若将此代码放在此处(子类的下方),会报错。即调用父类的构造器,super必须要在子类构造器的第一行 } private String name = "xian";
public void print(){
System.out.println("Student");
}
public void test1(){
print();
this.print();
super.print();
}
public void test(String name) {
System.out.println(name);//张三 传递过来的参数,此处的name是当前的String name,即传递的参数
System.out.println(this.name);//xian 当前类里面的东西 此处的name指代的是上面private的name
//在子类Student中如何访问父类Person中的属性
System.out.println(super.name);//zhang 父类中的,
// 此处的name指代的是父类Person中的name }
}
*/

Java学习之旅(day.09)的更多相关文章

  1. Java学习之旅开篇:运行机制及环境搭建

    在写这篇博客之前,我想对自己进行简单概括:我从事软件开发工作已经三年多了,并且一直在从事.NET相关项目的开发.为什么突然间想学习Java呢?有以下几个原因: 1. 开发程序三年多来,已经对.NET相 ...

  2. Java学习之旅基础知识篇:面向对象之封装、继承及多态

    Java是一种面向对象设计的高级语言,支持继承.封装和多态三大基本特征,首先我们从面向对象两大概念:类和对象(也称为实例)谈起.来看看最基本的类定义语法: /*命名规则: *类名(首字母大写,多个单词 ...

  3. 第一篇,java学习之旅

    在java的这座殿堂中,我才刚刚推开了大门,就像是在岔路口找到了一条,走向前进java大门的路. 下面是一些java算法的问题 第一题: package project.model; import j ...

  4. Java学习之旅(一):探索extends

    鄙人为兴趣爱好,0基础入门学习Java,有些心得想法,记录于此,与君分享. 然毕竟新手,学识尚浅,错误之处,希望多多指正批评,也是对我最大的帮助! 前言:本篇文章,主要讨论在子类继承父类之后,一些继承 ...

  5. Java学习之旅基础知识篇:数组及引用类型内存分配

    在上一篇中,我们已经了解了数组,它是一种引用类型,本篇将详细介绍数组的内存分配等知识点.数组用来存储同一种数据类型的数据,一旦初始化完成,即所占的空间就已固定下来,即使某个元素被清空,但其所在空间仍然 ...

  6. Java学习之旅基础知识篇:数据类型及流程控制

    经过开篇对Java运行机制及相关环境搭建,本篇主要讨论Java程序开发的基础知识点,我简单的梳理一下.在讲解数据类型之前,我顺便提及一下Java注释:单行注释.多行注释以及文档注释,这里重点强调文档注 ...

  7. 我的java学习之旅--一些基础

    (因为我粗略学过C,C++,Python,了解过他们的一些语法,所以为了使得java的入门更为顺畅,便会忽略一些和C语法相类似的地方,着重点明一些java自己的特色之处.也减轻一下自己写文字的负担.) ...

  8. Java学习之旅(二):生病的狗1(逻辑推导)

    前言:本篇文章属于个人笔记,例化了一些代码,不知是否合理,请指教. 中午看到一位同学的面试题,觉得很烧脑,烧脑不能一个人烧,要大家一起烧. 村子中有50个人,每人有一条狗.在这50条狗中有病狗(这种病 ...

  9. java学习之旅

    jar文件其实就是一个压缩包,里面包含很多class文件(一个class文件是一个类的字节码).方便在网络上传输.可以规定版本号,更容易进行版本控制. var只能在方法内使用,不能用于定义成员变量. ...

  10. 面向对象编程(OOP)的五大特征-java学习之旅(1)

    这是Alan Kay关于第一个成功的面向对象语言SmallTalk的总结: 1.所有的东西都是对象.可将对象想象成一种新型的变量:它保存着数据,但是可要求它对自身进行操作,理论上讲,可从要解决的问题身 ...

随机推荐

  1. 本周二晚19:00战码先锋第8期直播丨如何多方位参与OpenHarmony开源贡献

    OpenAtom OpenHarmony(以下简称"OpenHarmony")工作委员会首度发起「OpenHarmony开源贡献者计划」,旨在鼓励开发者参与OpenHarmony开 ...

  2. Linux 编译 libjpeg-9e

    jpeg的库有两个:一个是官方的 libjpeg  还有一个是 libjpeg-turbo JPEG库(libjpeg-turbo):https://libjpeg-turbo.org/ Libjpe ...

  3. Qt操作ini文件

    操作文件,无非就是读与写,以下为Qt读写ini文件的代码. demo: #include "widget.h" #include <QApplication> #inc ...

  4. 堆结构(Heap)的基本实现【数据结构与算法—TypeScript 实现】

    笔记整理自 coderwhy 『TypeScript 高阶数据结构与算法』课程 概念 本质:一种特殊的树结构,由 完全二叉树 实现 多数情况为二叉堆 二叉堆:最大堆.最小堆 最大堆:堆上的每个节点都的 ...

  5. HarmonyOS分布式文件系统开发指导

      分布式文件系统概述 分布式文件系统(hmdfs,HarmonyOS Distributed File System)提供跨设备的文件访问能力,适用于如下场景: ● 两台设备组网,用户可以利用一台设 ...

  6. k8s之存储卷local PV

    一.简介 local能够作为PV使用的本地存储卷. local卷插件用于将本地存储设备(如磁盘.分区或目录) 配置为卷. hostPath卷在Pod被重建后可能被调试至其它节点而无法再次使用此前的数据 ...

  7. swing 聊天窗体,支持图文模式

    package com.*.test; import java.awt.EventQueue; import java.awt.HeadlessException; import java.awt.T ...

  8. 微软自带的Hyper-V虚拟机使用、VMware16安装Win10虚拟机介绍

    一.首先介绍VMware虚拟机. 安装WIN10统虚拟机推荐用VMware16. 1.镜像网址: MSD网址传送门1:https://msdn.itellyou.cn MSD新网址传送门2:https ...

  9. vue中 如何实现一个单文件组件

    前端开发人员只要了解过vue.js框架可能都知道单文件组件.vue.js中的单文件组件允许在一个文件中定义一个组件的所有内容.这是一个非常有用的解决方案,在浏览器网页中已经开始提倡这种机制.但是不幸的 ...

  10. 鸿蒙HarmonyOS实战-ArkUI动画(弹簧曲线动画)

    前言 弹簧曲线动画是一种模拟弹簧运动的动画效果,通过改变弹簧的拉伸或压缩来表现不同的运动状态.以下是制作弹簧曲线动画的步骤: 创建一个弹簧的模型,可以使用圆形或者曲线来代表弹簧的形状. 将弹簧固定在一 ...