子类中如果没有私有属性,自然就无法用loombok实现有参构造;loombokm默认提供的时子类的无参构造,如果存在继承条件下,子类的无参构造其实包含两个,父类的公共属性的有参,和父类的无参,;Ctrl+shift+s进行无参调用时会实现两个相对于子类的无参构造方法;
/**
*
***loombok在继承中有参方法不可以使用,父类可以用@Data。@al@no
子类只能用@data然后用快捷键生成有参构造
父类改写toString为voidshowInfo.然后子类中调用showifo重写ToString方法
- */
0923笔记
初始化就是赋值的意思;
用构造函数来创建对象【包括有参和无参构造】
也可以在用构造函数创建对象的同时进行给对象赋值(实例化)
封装就是属性私有化,然后提供对外的接口(方法)【建立公共的setget方法】,供外部访问和调用,
final是最终的意思用在性别,数据库的密码,一周天数等固定值,修饰属性时是常量,调用属性不能再次赋值,否则报错,final的用法保证了程序的健壮性;
package cn.kgc.tyl.test0923.entity;
import lombok.NoArgsConstructor;
//封装2.0(继承在类的公共关系中提取公共类包含公共属性和方法减少代码冗余)
/**
*1.使用封装分别创建实体类Dog和1.使用封装分别创建实体类Dog和Penguin,其中:
Dog类中
包含属性(name,love,health,strain)
方法:print()显示狗狗的信息
构造方法:无参构造函数和带参构造函数,其中:
Dog类中
包含属性(name,love,health,strain)
方法:print()显示狗狗的信息
构造方法:无参构造函数和带参构造函数
Penguin类中
包含属性(name,love,health,sex) sex定义为静态常量并且赋值为Q仔
方法:print()显示企鹅的信息
构造方法:无参构造函数和带参构造函数
* */
@NoArgsConstructor
public class Dog {
//包含属性(name,love,health,strain
private String name,Strain;
private int love,health;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getStrain() {
return Strain;
}
public void setStrain(String strain) {
Strain = strain;
}
public int getLove() {
return love;
}
public void setLove(int love) {
if (love>100||love<0) {
this.love = 0;
}else {
this.love = love;
}
}
public int getHealth() {
return health;
}
public void setHealth(int health) {
if (health>100||health<0) {
this.health = 0;
}else {
this.health = health;
}
}
public Dog(String name, String strain, int love, int health) {
super();
this.name = name;
Strain = strain;
setHealth(health);
setLove(love);
}
@Override
public String toString() {
return "狗狗的名字=" +this.getName()+ ", 品种=" + this.getStrain()+ ", 和主人的亲密的=" + this.getLove() + ", 健康值是=" + this.getHealth() + "]";
}
public void print() {
System.out.println("狗狗的名字=" +this.getName()+ ", 品种=" + this.getStrain() + ", 和主人的亲密的=" + this.getLove() + ", 健康值是=" + this.getHealth() + "."
);
}
}
*************************************************************************
@NoArgsConstructor
public class Penguin {
// 包含属性(name,love,health,sex
private String name;
private int love,health;
public static final String SEX="Q仔";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getLove() {
return love;
}
public void setLove(int love) {
if (love>100||love<0) {
this.love = 0;
}else {
this.love = love;
}
}
public int getHealth() {
return health;
}
public void setHealth(int health) {
if (health>100||health<0) {
this.health = 0;
}else {
this.health = health;
}
}
public Penguin(String name, int love, int health) {
super();
this.name = name;
setHealth(health);
setLove(love);
}
@Override
public String toString() {
return "企鹅的名字=" +this.getName()+ ", 性别=" + this.SEX + ", 和主人的亲密的=" + this.getLove() + ", 健康值是=" + this.getHealth() + "]";
}
public void print() {
System.out.println("企鹅的名字=" +this.getName()+ ", 性别=" + this.SEX + ", 和主人的亲密的=" + this.getLove() + ", 健康值是=" + this.getHealth() + "."
);
}
**********************************************************************
public class Test {
public static void main(String[] args) {
//狗类
Dog dog2=new Dog("小黑", "牧羊犬", -11, 0);
dog2.print();
Dog dog1=new Dog();
dog1.setName("小白");
dog1.setHealth(19);
dog1.setStrain("藏獒");
dog1.setLove(-11);
dog1.print();
//企鹅类
Penguin p1=new Penguin();
p1.setLove(100);
p1.setName("小白");
p1.setHealth(90);
p1.print();
Penguin p2=new Penguin("小花", -100, 105);
p2.print();
}
}
运行结果
狗狗的名字=小黑, 品种=牧羊犬, 和主人的亲密的=0, 健康值是=0.
狗狗的名字=小白, 品种=藏獒, 和主人的亲密的=0, 健康值是=19.
企鹅的名字=小白, 性别=Q仔, 和主人的亲密的=100, 健康值是=90.
企鹅的名字=小花, 性别=Q仔, 和主人的亲密的=0, 健康值是=0.
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
```java
封装3.0(继承之后用多态减少代码冗余,实现程序的可维护性和扩展性)
package cn.kgc.tyl.test0923.testextends;
/**
*
实体类宠物类(父类)
* */
import lombok.NoArgsConstructor;
@NoArgsConstructor
public class Pet {
//包含属性(name,love,health,strain
private String name;
private int love,health;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getLove() {
return love;
}
public void setLove(int love) {
if (love>100||love<0) {
this.love = 0;
}else {
this.love = love;
}
}
public int getHealth() {
return health;
}
public void setHealth(int health) {
if (health>100||health<0) {
this.health = 0;
}else {
this.health = health;
}
}
public String showinfo() {
return "宠物名字=" + this.getName()+ ", 和主人亲密度=" + this.getLove() + ", 健康值=" + this.getHealth() + ".";
}
public Pet(String name, int love, int health) {
super();
this.name = name;
setHealth(health);
setLove(love);
}
}
******************************************************************************************************************
package cn.kgc.tyl.test0923.testextends;
/**
*
实体类狗类(子类)
* */
import lombok.NoArgsConstructor;
@NoArgsConstructor
public class Dog extends Pet{
//包含属性(name,love,health,strain
private String Strain;
public String getStrain() {
return Strain;
}
public void setStrain(String strain) {
Strain = strain;
}
public Dog(String name, int love, int health, String strain) {
super(name, love, health);
Strain = strain;
}
@Override
public String toString() {
System.out.println(this.showinfo());//通过调用父类的toSting 方法实现多态;
return ", 品种=" + this.getStrain()+ ".";
}
}
***************************************************************************************************************************************
/**
*
实体类企鹅类(子类)
* */
package cn.kgc.tyl.test0923.testextends;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
public class Penguin extends Pet{
// 包含属性(name,love,health,sex
public static final String SEX="Q仔";
@Override
public String toString() {
System.out.println(this.showinfo());//通过调用父类的toSting 方法实现多态;
return ",企鹅的性别"+this.SEX;
}
public Penguin() {
super();
}
public Penguin(String name, int love, int health) {
super(name, love, health);
}
//重点在继承种如果子类没有参数,要想使用有参,不能用loombok,需要快捷键调用无参,然后再次调用有参;
}
*************************************************************************************************************************
package cn.kgc.tyl.test0923.testextends;
import cn.kgc.tyl.test0923.entity.Dog;
import cn.kgc.tyl.test0923.entity.Penguin;
/**
*2.编写测试类Test
使用无参构造方法创建Dog类的对象和Penguin对象,并且给Dog和Penguin对象的属性赋值,输出狗狗和企鹅的信息
使用带参构造方法创建Dog类的对象和Penguin对象,并且给Dog和Penguin对象的属性赋值,输出狗狗和企鹅的信息
3.方法重载的概念:同一个类中,方法同名不同参
4.封装的概念:高内聚低耦合,隐藏属性,通过控制语句,防止非法传参
5.封装的优势:防止非法赋值,保护数据,减少暴漏不必要的信息
6.封装的步骤:1属性设为私有,2构建setget方法,并在必要条件给set方法添加控制语句,并在有参构造方法中进行set方法调用
7.类图的作用:通过写类的名称,属性名称和数据类型,方法名和返回值,方便自己看信息梳理思路,也方便工作交接;
* */
public class Test {
public static void main(String[] args) {
//狗类
Dog dog2=new Dog("小黑", "牧羊犬", -11, 0);
Dog dog1=new Dog();
dog1.setName("小白");
dog1.setHealth(19);
dog1.setStrain("藏獒");
dog1.setLove(-11);
System.out.println(dog1);
System.out.println(dog2);
//企鹅类
Penguin p1=new Penguin();
p1.setLove(100);
p1.setName("小白");
p1.setHealth(90);
Penguin p2=new Penguin("小花", -100, 105);
System.out.println(p1);
System.out.println(p2);
}
}
*****************************************************************************************************************************
封装3.0代码的类图
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020092317345639.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ1NDQyMjYx,size_16,color_FFFFFF,t_70#pic_center)