面向对象之抽象类总结

0924笔记
*,1在版本控制【版本迭代】过程中.如果改写Java文件复制后,要检查是否导错包
创建可重用代码的一种方法就是创建框架,框架的思想就是围绕着【即插即用和重用】原则,可以用接口和抽象类来实现;

  • 2.重写是不同类中,存在继承关系,同名同参,子类的访问权限》=父类;子类的返回值类型《=父类;子类的异常《=父类
  • 3.代码设计优化过程中,因为继承的关系,父类中的一些方法没有必要实例化,所以方法体可以省略,然后引出抽象的概念把方法改为抽象方法,让子类重写实现带有自己特点的同名方法,叫重写;
  • 4.抽象类用abstract关键字标注,子类必须实现父类的抽象方法,所以抽象针对的是父类,并且父类一定不是private类型的【否则不能被子类访问】
  • 5.抽象类有构造方法是一个不完全的类,但是不能被实例化,不能够通过类名进行创建对象;
  • 6.抽象类中可以有普通方法,也可以有抽象方法【抽象方法用abstract修饰方法,没有花括号的方法体,参数列表的括号后加分号结束】一个抽象类可以没有抽象方法,但是有抽象方法的类一定是抽象类;
  • 7.extends关键字,必须符合isa的关系,子类不能继承父类的构造函数,但是可以调用;子类可以继承父类的私有属性,但是不能被访问;子类不能继承父类中的构造函数,只能有super()来调用父类的构造函数;子类默认调用父类的无参构造;
    8.写代码过程中有类似的代码,为了解决代码冗余的问题,引入了抽象类,抽象类中可以有抽象方法和实力方法;子类要么必须实现父类的抽象方法,要么子类也是抽象方法;
    add implements methods:子类必须实现父类所有的抽象方法、
    make type [Dog子 类] abstract: 将子类也变为抽象类;
    当子类也变为抽象类的缺陷:子类也无法建立对象,实例化了。一个类可以是子类也可以是父类;
    9final关键字修饰类名,方法名属性名;修饰类名,最终类,不能被继承;
    修饰变量,属性变为常量,属性名应该【不是】必须大写,此时常量必须赋初始值,并且运行过程中不能二次赋值;
    修饰方法,不能和abstract【抽象需要被继承】同时使用,方法不能被重写【重写发成在多个类有继承关系中】 ,方法体必须有【否则为抽象方法,然后变成抽象类】
    10.最终总结:
  1. 因为类之间会存在代码冗余,我们把公共的代码放在一个一个新的类中,然后其他类继承这个新的类即可,这种解决问题的方式成为继承

2.因为继承所以出现了父类和子类,那么this用来调用本类的成员,super关键字用在子类中,调用父类的成员

3.因为父类中成员只能被父类自己和子类访问到就可以了,所以我们把父类的成员由private修改成protected

4.因为实例化父类没有意义,所以我们可以选择不让父类实例化,我们用abstract关键字修饰了父类,导致父类不能实例化了

5.因为父类不能实例化了,所以我们就把父类中的构造函数删除了

6.因为父类中的方法中方法体里面的内容不能满足各个子类的业务需求,所以我们只让父类声明方法即可

也就是没有方法体,然后让各个子类自己去重写父类的方法就可以啦,那么我们用abstract修饰父类中的方法,这样父类中的方法就可以没有方法体了

7.注意:一旦父类中有抽象方法,那么该父类必须是抽象类,如果父类是抽象类,不一定有抽象方法,因为抽象类中可以有抽象方法和实例方法

8.如果父类中有抽象方法,子类必须重写父类中的所有抽象方法,除非该子类也是抽象类

初级代码,
package cn.kgc.tyl.test0924.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 *
 使用封装+构造函数(无参,有参)
1.创建花Flower类作为父类  属性(name,area(产地))
2.创建MeiGuiHua类继承Flower类,特有属性(color(颜色))  使用super关键字调用父类的构造函数
2.创建KangNaiXin类继承Flower类,特有属性(color(颜色))  使用super关键字调用父类的构造函数
3.测试类Test输出玫瑰花MeiGuiHua和KangNaiXin类的信息的信息即可
 * */
@Data
@AllArgsConstructor
@ NoArgsConstructor
public class Flower {
private String name,area;//花名,产地;


public void showInfo() {
	System.out.print("花名=" + name + ",产地=" + area + ","); 
}

}
**********************************************************************************************
package cn.kgc.tyl.test0924.entity;

import lombok.AllArgsConstructor;
import lombok.Data;

/**
*
*loombok在继承中有参方法不可以使用,父类可以用@Data。@al@no
*子类只能用@data然后用快捷键生成有参构造
*父类改写toString为voidshowInfo.然后子类中调用showifo重写ToString方法

* */
@Data

public class KangNaixin extends Flower {
private String color;




@Override
public String toString() {
	showInfo();
	return "花色=" + color + "。";
}




public KangNaixin(String name, String area, String color) {
	super(name, area);
	this.color = color;
}
}
***********************************************************************************************
package cn.kgc.tyl.test0924.entity;

import lombok.AllArgsConstructor;
import lombok.Data;

/**
 *
 玫瑰花子类
 * */
@Data


public class MeiGuiHu  extends Flower{
public MeiGuiHu(String name, String area, String color) {
		super(name, area);
		this.color = color;
	}

private String color;



@Override
public String toString() {
	showInfo();
	return "花色=" + color + "。";
}





}
***************************************************************************************************
package cn.kgc.tyl.test0924.Test;

import cn.kgc.tyl.test0924.entity.KangNaixin;
import cn.kgc.tyl.test0924.entity.MeiGuiHu;

/**
 *
 测试类
 * */
public class TestFlower {
 public static void main(String[] args) {
	 MeiGuiHu m=new MeiGuiHu("玫瑰花", "荷兰", "红色");
	 System.out.println(m.toString());
	 KangNaixin k=new KangNaixin("康乃馨", "荷兰", "白色");
	 System.out.println(k.toString());
}
}
//花名=玫瑰花,产地=荷兰,花色=红色。
//花名=康乃馨,产地=荷兰,花色=白色。

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200924112831920.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ1NDQyMjYx,size_16,color_FFFFFF,t_70#pic_center)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
用抽象类写父类方法类图及代码如下:【抽象类方法是倾斜的字体】
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200924113056819.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ1NDQyMjYx,size_16,color_FFFFFF,t_70#pic_center)具体代码如下:
package cn.kgc.tyl.test0924.testAbstract;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 *
 使用封装+构造函数(无参,有参)
1.创建花Flower类作为父类  属性(name,area(产地))
2.创建MeiGuiHua类继承Flower类,特有属性(color(颜色))  使用super关键字调用父类的构造函数
2.创建KangNaiXin类继承Flower类,特有属性(color(颜色))  使用super关键字调用父类的构造函数
3.测试类Test输出玫瑰花MeiGuiHua和KangNaiXin类的信息的信息即可
 * */
@Data
@AllArgsConstructor
@ NoArgsConstructor
public abstract class Flower {
private String name,area;//花名,产地;


public abstract void showInfo() ;

}
************************************************************************************************************************************
package cn.kgc.tyl.test0924.testAbstract;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;

/**
*
*loombok在继承中有参方法不可以使用,父类可以用@Data。@al@no
*子类只能用@data然后用快捷键生成有参构造
*父类改写toString为voidshowInfo.然后子类中调用showifo重写ToString方法

* */
@Data

public class KangNaixin extends Flower {
	@Setter
	@Getter
private String color;


public KangNaixin(String name, String area, String color) {
	super(name, area);
	this.color = color;
}




@Override
public void showInfo() {
	System.out.println("花名=" + this.getName()+ ",产地=" + this.getArea() + ","+"花色=" + this.getColor()+ "。");
}
}
******************************************************************************************************************
package cn.kgc.tyl.test0924.testAbstract;

import lombok.AllArgsConstructor;
import lombok.Data;

/**
 *
 玫瑰花子类
 * */
@Data


public class MeiGuiHu  extends Flower{
public MeiGuiHu(String name, String area, String color) {
		super(name, area);
		this.color = color;
	}

private String color;



@Override
public void showInfo() {
	System.out.println("花名=" + this.getName()+ ",产地=" + this.getArea() + ","+"花色=" + this.getColor()+ "。");
}





}
****************************************************************************************************************************
package cn.kgc.tyl.test0924.testAbstract;




public class TestFlower {
 public static void main(String[] args) {
	 MeiGuiHu m=new MeiGuiHu("玫瑰花", "荷兰", "红色");
	m.showInfo();
	 KangNaixin k=new KangNaixin("康乃馨", "荷兰", "白色");
	k.showInfo();
}
}
**************************************************************************************************
//运行结果:花名=玫瑰花,产地=荷兰,花色=红色。
//花名=康乃馨,产地=荷兰,花色=白色。




  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_45442261

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值