Java abstract 抽象类的详解介绍

抽象类概念
    .在Java中,一个没有方法体的方法应该被定义为抽象方法,而类中如果有抽象方法,那么该类必须定义为抽象类
    
抽象类特点(官方说法
    .抽象类和抽象方法必须使用abstract关键字
       示例
       public abstract class 类名
       public abstract void 方法名();
    .抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
    .抽象类不能被实例化    
       .如何进行实例化呢? 参照多态的方式,通过子类对象实例化,这叫抽象多态
    .抽象类的子类
       .要么重写抽象类中的所有抽象方法
       .要么是抽象类
             
抽象类特点(自己领悟)
    .抽象类和抽象方法都必须使用abstract关键字来修饰
    .抽象类里面是可以存放非抽象方法的(抽象类里面可以没有抽象方法)但是有抽象方法的类必须是抽象类 
    .抽象类不可被创建对象,也就是实例化,
    (抽象类想要访问方法,就必须有使用多态的方法,也就是有继承关系,也就是使子类实例化,通过子类的继承关系,来访问到抽象类也就是父类)
    .抽象类中的子类,要么重写抽象类中的抽象方法,要么也是抽象类
抽象类的成员特点
    成员变量
        .可以是变量
        .也可以是常量
    构造方法
        .有构造方法,但是不能实例化
        .那么,构造方法的作用是什么?用于子类访问父类数据的初始化
    成员方法
        .可以有抽象方法:限定子类必须完成一些动作
        .也可以有非抽象方法:提高代码的复用性     代码的复用性,是由继承保证的

以下第一个案例有五个类,分别是animaldemo类  animal类 cat类 dog类

第二个案例有三个类,用来验证抽象类的成员特点

分别有animaldemo类  animal类  cat类

 animaldemo类

package abstract抽象类;

public class animaldemo {
	/*
抽象类
    .在Java中,一个没有方法体的方法应该被定义为抽象方法,而类中如果有抽象方法,那么该类必须定义为抽象类
    
抽象类特点(官方说法)
    .抽象类和抽象方法必须使用abstract关键字
       示例
       public abstract class 类名
       public abstract void 方法名();
    .抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
    .抽象类不能被实例化    
       .如何进行实例化呢? 参照多态的方式,通过子类对象实例化,这叫抽象多态
    .抽象类的子类
       .要么重写抽象类中的所有抽象方法
       .要么是抽象类
             
抽象类特点(自己领悟)
    .抽象类和抽象方法都必须使用abstract来修饰
    .抽象类里面是可以存放非抽象方法的(抽象类里面可以没有抽象方法)但是有抽象方法的类必须是抽象类 
    .抽象类不可被创建对象,也就是实例化,
    (抽象类想要访问方法,就必须有使用多态的方法,也就是有继承关系,也就是使子类实例化,通过子类的继承关系,来访问到抽象类也就是父类)
    .抽象类中的子类,要么重写抽象类中的抽象方法,要么也是抽象类
抽象类的成员特点
    成员变量
        .可以是变量
        .也可以是常量
    构造方法
        .有构造方法,但是不能实例化
        .那么,构造方法的作用是什么?用于子类访问父类数据的初始化
    成员方法
        .可以有抽象方法:限定子类必须完成一些动作
        .也可以有非抽象方法:提高代码的复用性     代码的复用性,是由继承保证的
    
	 */

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		//抽象类不是具体的,就不能创建对象,所以animal a = new animal();就会报错
//		animal a = new animal();
//		a.eat();
		animal a = new cat();
		a.eat();
		a.sleep();//可以通过子类的对象实例化后 进行访问和调用,但是有个前提就是,必须有了继承关系之后
	}

}

animal类

package abstract抽象类;

public abstract class animal {
//	public void eat() {
//		// TODO 自动生成的方法存根
//		System.out.println("吃东西");
//
//	}
	//一个方法,要么有方法体,要么把他定义为抽象的
	//抽象方法必须放到抽象类里面
	public abstract void eat(); 
	public void sleep() {
		// TODO 自动生成的方法存根
		System.out.println("睡觉");

	}
	

}

 cat类

package abstract抽象类;

public class cat extends animal {
	@Override
	public void eat() {
		// TODO 自动生成的方法存根
		System.out.println("猫吃鱼");
		
	}

}

dog类

package abstract抽象类;

public abstract class dog extends animal{

}

 第二个案例animaldemo类  animal类  cat类

animaldemo类

package abstract抽象类成员特点;

public class animaldemo {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		animal a = new cat();
		a.eat();
		a.show();

	}

}

animal类

(可以看得出来,在这里面,我们写构造方法了,但是既然抽象类不能被实例化,构造方法的存在又有何意义呢?其实我们可以根据多态的方法,利用他的子类来创建对象,然后就可以根据构造方法进行赋值了)

package abstract抽象类成员特点;

public abstract class animal {
	private int age =20;
	private final String city="北京";
	
	public void show() {
		// TODO 自动生成的方法存根
		age=40;
		System.out.println(age);
//		city="上海";
		System.out.println(city);

	}
	public abstract void eat();
	
	
	
	
	/**
	 * @param age
	 */
	public animal(int age) {
		super();
		this.age = age;
	}
	/**
	 * 
	 */
	public animal() {
		super();
	}
	
	
	
	
	

	

}

cat类

package abstract抽象类成员特点;

public class cat extends animal {
	@Override
	public void eat() {
		// TODO 自动生成的方法存根
	System.out.println("猫吃鱼");	
	}

}

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1.1 Java语言发展简史2 1.2 认识Java语言3 1.2.1 Java语言特性3 1.2.2 JavaApplet4 1.2.3 丰富的类库4 1.2.4 Java的竞争对手5 1.2.5 Java在应用领域的优势7 1.3 Java平台的体系结构7 1.3.1 JavaSE标准版8 1.3.2 JavaEE企业版10 1.3.3 JavaME微型版11 1.4 JavaSE环境安装和配置12 1.4.1 什么是JDK12 1.4.2 JDK安装目录和实用命令工具介绍12 1.4.3 设置环境变量13 1.4.4 验证配置的正确性14 1.5 MyEcilpse工具介绍JavaSE环境安装和配置15 1.6 本章练习16 第2章 2.1 什么是程序18 2.2 计算机中的程序18 2.3 Java程序19 2.3.1 Java程序中的类型19 2.3.2 Java程序开发三步曲21 2.3.3 开发Java第一个程序21 2.3.4 Java代码中的注释23 2.3.5 常见错误解析24 2.4 Java类库组织结构和文档27 2.5 Java虚拟机简介28 2.6 Java技术两种核心运行机制29 2.7 上机练习30 第3章 3.1 变量32 3.1.1 什么是变量32 3.1.2 为什么需要变量32 3.1.3 变量的声明和赋值33 3.1.4 变量应用实例33 3.2 数据的分类34 3.2.1 Java中的八种基本数据类型34 3.2.2 普及二进制36 3.2.3 进制间转换37 3.2.4 基本数据类型间转换38 3.2.5 数据类型应用实例38 3.2.6 引用数据类型39 3.3 关键字.标识符.常量39 3.3.1 变量命名规范39 3.3.2 经验之谈-常见错误的分析与处理40 3.3.3 Java标识符命名规则41 3.3.4 关键字42 3.3.5 常量42 3.4 运算符43 3.4.1 算术运算符43 3.4.2 赋值操作符45 3.4.3 关系操作符47 3.4.4 逻辑操作符48 3.4.5 位操作符49 3.4.6 移位运算符49 3.4.7 其他操作符50 3.5 表达式52 3.5.1 表达式简介52 3.5.2 表达式的类型和值52 3.5.3 表达式的运算顺序52 3.5.4 优先级和结合性问题52 3.6 选择结构54 3.6.1 顺序语句54 3.6.2 选择条件语句54 3.6.3 switch结构59 3.6.4 经验之谈-常见错误的分析与处理65 3.6.5 Switch和多重if结构比较66 3.7 循环语句66 3.7.1 While循环67 3.7.2 经验之谈-常见while错误70 3.7.3 do-while循环72 3.7.4 for循环74 3.7.5 经验之谈-for常见错误76 3.7.6 循环语句小结78 3.7.7 break语句79 3.7.8 continue语句82 3.8 JavaDebug技术84 3.9 本章练习85 第4章 4.1 一维数组90 4.1.1 为什么要使用数组90 4.1.2 什么是数组91 4.1.3 如何使用数组92 4.1.4 经验之谈-数组常见错误97 4.2 常用算法98 4.2.1 平均值,最大值,最小值98 4.2.3 数组排序102 4.2.3 数组复制103 4.3 多维数组105 4.3.1 二重循环105 4.3.2 控制流程进阶107 4.3.3 二维数组111 4.4 经典算法113 4.4.1 算法-冒泡排序113 4.4.2 插入排序115 4.5 增强for循环116 4.6 本章练习117 第5章 5.1 面向过程的设计思想120 5.2 面向对象的设计思想120 5.3 抽象121 5.3.1 对象的理解121 5.3.2 Java抽象思想的实现122 5.4 封装124 5.4.1 对象封装的概念理解124 5.4.2 类的理解125 5.4.3 Java类模板创建125 5.4.4 Java中对象的创建和使用127 5.5 属性130 5.5.1 属性的定义130 5.5.2 变量131 5.6 方法132 5.6.1 方法的定义132 5.6.2 构造方法135 5.6.4 方法重载138 5.6.5 自定义方法138 5.6.6 系统提供方法139 5.6.7 方法调用140 5.6.8 方法参数及其传递问题144 5.6.9 理解main方法语法及命令行参数147 5.6.1 0递归算法147 5.7 this关键字148 5.8 JavaBean149 5.9 包150 5.9.1 为什么需要包?150 5.9.2 如何创建包151 5.9.3 编译并生成包:151

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

看到我,请让我去学习

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

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

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

打赏作者

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

抵扣说明:

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

余额充值