封装

1.封装

1.1 封装的概念和实现

封装:

属性私有:将属性使用private修饰,表示此属性只能在本类中访问,不让外部直接访问

方法公开:针对每一个属性编写一对公开的方法 get set 分别用于属性的取值/赋值

package com.atguigu.demo.demo1;

public class Test1 {
public static void main(String[] args) {
Rabbbit rabbbit = new Rabbbit();
rabbbit.setName("小白兔");
rabbbit.setHealth(-19);
rabbbit.setAppetite(1111);
rabbbit.setColor("白色");
}
} class Rabbbit{
private String name;//名字
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
} private String color;//颜色
public void setColor(String color) {
if((!color.equals("黑"))||(!color.equals("白"))||(!color.equals("灰"))){
System.out.println("您输入的颜色太花哨,"+color+"我们将默认设置为:白色");
this.color="白";
}else{
this.color = color;
}
}
public String getColor() {
return color;
} private int health;//健康值 public void setHealth(int health) {
if(((health<0)||(health>100))){
System.out.println("您输入的健康值不合法,"+health+"我们将默认设置为:60");
this.health=60;
}else{
this.health = health;
} }
public int getHealth() {
return health;
} private double appetite;//食量
public void setAppetite(double appetite) {
if(((appetite<0)||(appetite>100))){
System.out.println("您输入的健康值不合法,"+appetite+"我们将默认设置为:60");
this.appetite=10;
}else{
this.appetite = appetite;
}
}
public double getAppetite() {
return appetite;
}
}

1.2封装的好处

便于使用者正确使用系统,防止错误修改属性

降低了构建大型系统的风险

提高程序的可重用性

降低程序之间的耦合度

2.访问权限修饰符

2.1 类的访问修饰符

类的访问权限修饰符有两个:

public :表示在本项目中任何位置都可以访问

默认不写:表示在同包中才能访问

2.2 类成员的访问修饰符

  • 类成员访问修饰符:类的成员包括属性、方法、构造方法、代码块
  • private:本类
  • 默认不写:本包/同包
  • protected:本类、本包、子类
  • public:任何位置

3. 类类型的属性

3.1 对象类型的属性

自定义类型的属性,引用数据类型。

3.2 对象类型数组属性

自定义类型的数组 ,依然属于引用数据类型,使用方式与之前一致

package com.atguigu.demo.demo3;

public class Person {
private String name;
private String sex;
private int age;
private Address address;
private Hobby[] habby; public Person() {
} public Person(String name, String sex, int age, Address address, Hobby[] habby) {
this.name = name;
this.sex = sex;
this.age = age;
this.address = address;
this.habby = habby;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public Address getAddress() {
return address;
} public void setAddress(Address address) {
this.address = address;
} public Hobby[] getHabby() {
return habby;
} public void setHabby(Hobby[] habby) {
this.habby = habby;
}
}
package com.atguigu.demo.demo3;

public class Address {
private String province;
private String city;
private String street;
private String buildNo; public Address() {
} public Address(String province, String city, String street, String buildNo) {
this.province = province;
this.city = city;
this.street = street;
this.buildNo = buildNo;
} public String getProvince() {
return province;
} public void setProvince(String province) {
this.province = province;
} public String getCity() {
return city;
} public void setCity(String city) {
this.city = city;
} public String getStreet() {
return street;
} public void setStreet(String street) {
this.street = street;
} public String getBuildNo() {
return buildNo;
} public void setBuildNo(String buildNo) {
this.buildNo = buildNo;
}
}
package com.atguigu.demo.demo3;

public class Hobby {
private String type;
private String name; public Hobby() {
} public Hobby(String type, String name) {
this.type = type;
this.name = name;
} public String getType() {
return type;
} public void setType(String type) {
this.type = type;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
}
package com.atguigu.demo.demo3;

public class TestPerson {
public static void main(String[] args) { Person p1 = new Person();
p1.setName("张麻子");
p1.setSex("男");
p1.setAge(32); Address a1 = new Address("重庆市","江津区","龙华镇","鹅城");
p1.setAddress(a1); Hobby[] hobbis=new Hobby[3];
hobbis[0] = new Hobby("体育","跑步");
hobbis[1] = new Hobby("电竞","天涯明月刀");
hobbis[2] = new Hobby("音乐" ,"周杰伦");
p1.setHabby(hobbis); System.out.println("姓名:"+p1.getName());
System.out.println("性别:"+p1.getSex());
System.out.println("年龄:"+p1.getAge());
System.out.println("家庭住址:"+p1.getAddress().getProvince()+
p1.getAddress().getCity()+p1.getAddress().getStreet()+p1.getAddress().getBuildNo()); int way = 1;
for (int i = 0; i < hobbis.length; i++) {
System.out.println("第"+(way++)+"个爱好是:"+hobbis[i].getType()+"类:"+hobbis[i].getName());
} }
}

4. 继承

子类继承父类,子类与父类是is-a的关系

Java中只支持单根继承,即一个类只能有一个直接父类,间接父类不设限

4.1 可以继承那些内容

继承public和protected修饰的属性和方法,不管子类和父类是否在同一个包里

继承默认权限修饰符修饰的属性和方法,但子类和父类必须在同一个包里

private修饰的属性和方法不能被继承

4.2 不能继承那些内容

private成员

子类与父类不在同包,使用默认访问权限的成员

构造方法(构造方法用于给子类访问,不属于继承)

5. super关键字

super关键字:表示父类的对象

可以访问父类的属性、方法、构造方法

5.1 super访问父类属性

5.2 super访问父类方法

回顾之前我们调用父类print方法,存在的两个问题:

1.因为父类中只有共有的属性,所以打印宠物信息不完善

2.父类中对宠物身份描述不具体

我们通过super关键字访问父类的方法,可以解决第一个小问题,相当于功能的组合

5.3 super访问父类构造

无参构造方法默认存在,JVM提供的,如果书写了有参构造,无参构造将被覆盖,如需使用,必须显式书写。

1.子类构造方法默认访问父类的无参构造方法,除非子类显式的访问父类的有参构造方法

2.子类构造方法必须访问父类无参或者有参构造其中一个

3.访问父类的构造方法,并不会创建父类对象,访问父类构造方法智慧初始化父类中的属

package com.atguigu.demo.demo1;

public class Animal {
protected String name;
protected int age;
protected String sex; public Animal() {
} public Animal(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
} 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 String getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
} public void printAnimal(){
System.out.println("This animal name's :"+ name );
System.out.println("This animal age is :"+ age );
System.out.println("This animal sex is :"+ sex );
}
}
package com.atguigu.demo.demo1;

/**
* super关键字
*/
public class Dog extends Animal{
private String dogType; public Dog() {
} public Dog(String name,int age,String sex ,String dogType) {
super(name,age,sex); //调用父类构造
this.dogType = dogType;
} public String getDogType() {
return dogType;
} public void setDogType(String dogType) {
this.dogType = dogType;
} public void printDog() {
super.printAnimal(); //调用父类方法
// System.out.println(super.name);//调用父类属性
System.out.println("This dog's TYPE is"+dogType);
} }

Java学习day09—-封装和继承的更多相关文章

  1. Java学习笔记——封装、继承和多态

    先说说封装: 用new 一条狗来举个例子: public class Dog { //私有化字段 private String name; private int age; //无参构造 Dog(){ ...

  2. Java 面向对象,封装,继承

    1相关概念的理解 1.1面向过程.面向对象 面向过程与面向对象都是编程中,编写程序的一种思维方式. 面向过程的程序设计方式,是遇到一件事时,思考“我该怎么做”,然后一步步实现的过程.(职员思想) 面向 ...

  3. 浅析Java三大特性封装、继承、多态,及作业分析

    前言 本次博客衔接上次博客,作为这一阶段Java学习的分析.上一篇博客着重介绍了Java的OO编程思维,面向对象与面向过程的区别.本篇博客重心在Java的三大技术特性,附带作业分析. Java三大特性 ...

  4. Java 三大特性——封装、继承、多态

    一.封装 封装,实际就是把属于同一类事物的共性(包括属性与方法)归到一个类中,以方便使用. 概念:在面向对象程式设计方法中,封装(英语:Encapsulation)是指,一种将抽象性函式接口的实作细节 ...

  5. Java—类的封装、继承与多态

    一.类和对象 1.类 类是数据以及对数据的一组操作的封装体. 类声明的格式: 类声明 { 成员变量的声明: 成员方法的声明及实现: } 1.1 声明类 [修饰符] class 类<泛型> ...

  6. java学习笔记6--类的继承、Object类

    接着前面的学习: java学习笔记5--类的方法 java学习笔记4--类与对象的基本概念(2) java学习笔记3--类与对象的基本概念(1) java学习笔记2--数据类型.数组 java学习笔记 ...

  7. java面向对象(封装,继承,多态,抽象,接口的定义和实现)

    1.封装 在面向对象程式设计方法中,封装(英语:Encapsulation)是指,一种将抽象性函式接口的实作细节部份包装.隐藏起来的方法. 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定 ...

  8. PHP面向对象的学习(封装,继承,多态)

    这个文章就是记录  巩固一下PHP的面向对象的部分 ,无非就是封装,继承,多态等等这几部分 这里参考了一位大佬总结的文章:https://www.cnblogs.com/adaia/p/6986576 ...

  9. 学习笔记 Java类的封装、继承和多态 2014.7.10

    1.问题:toString()没搞懂? int a = 1; Integer aa = new Integer(a); //这是实现的过程 System.out.println("Hello ...

随机推荐

  1. SUSE系统---keepalived的搭建

    作为博客第一篇,先小尝初试一下搭建keepalived,因为项目需要搭建集群,为了满足需要,需要服务器对外暴露个虚拟IP,进行集群部署. 第一步:先把keepalived.tra.gz压缩包放到相应目 ...

  2. 739. Daily Temperatures - LeetCode

    Question 739. Daily Temperatures Solution 题目大意:比今天温度还要高还需要几天 思路:笨方法实现,每次遍历未来几天,比今天温度高,就坐标减 Java实现: p ...

  3. Linux用户权限集中管理方案

    一.问题 服务器多,各个服务器上的管理人员多,ROOT权限泛滥,经常导致文件莫名其妙丢失,老手和新手对服务器的熟知程度不同,安全存在不稳定和操作安全隐患. 二.方案 利用sudo配置指定用户只能执行指 ...

  4. netty系列之:netty对marshalling的支持

    目录 简介 netty中的marshalling provider Marshalling编码器 Marshalling编码的另外一种实现 总结 简介 在之前的文章中我们讲过了,jboss marsh ...

  5. ML第一周学习小结

    最近的学习内容为<Python机器学习基础教程>这本书 从第一章开始,慢慢来,比较快. 一下为我的本周机器学习小结,以及下周的Flag. 本周收获 总结一下本周学习内容: 1.了解到机器学 ...

  6. Centos免密登陆

    证书登录: 这里说的证书其实就是密钥. 在非对称加密中, 密钥分为公钥和私钥. 私钥, 即密钥所有人持有. 公钥则公布给他人. 公钥和私钥成对使用, 互相解密. 公钥加密数据只能用私钥解密; 私钥加密 ...

  7. 使用 KubeKey 搭建 Kubernetes/KubeSphere 环境的"心路(累)历程"

    目录 今天要干嘛? 在哪里干? 从哪里开始干? 快速开干! 解决依赖问题再继续干! 如何干翻重来? 连着 KubeSphere 一起干! 干不过,输了. 重整旗鼓,继续干! 再次重整旗鼓,继续干! 一 ...

  8. .NET中线程锁的使用

    更新记录 本文迁移自Panda666原博客,原发布时间:2021年7月1日. 一.说明 由于经常需要在多线程代码中使用Monitor进行同步,并且需要自己去手写try/finally块.因此C#提供了 ...

  9. Apache ShardingSphere 5.1.2 发布|全新驱动 API + 云原生部署,打造高性能数据网关

    在 Apache ShardingSphere 5.1.1 发布后,ShardingSphere 合并了来自全球的团队或个人的累计 1028 个 PR,为大家带来 5.1.2 新版本.该版本在功能.性 ...

  10. Pytorch实现波阻抗反演

    Pytorch实现波阻抗反演 1 引言 地震波阻抗反演是在勘探与开发期间进行储层预测的一项关键技术.地震波阻抗反演可消除子波影响,仅留下反射系数,再通过反射系数计算出能表征地层物性变化的物理参数.常用 ...