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
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

想给世界留下 1bite 的印象

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

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

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

打赏作者

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

抵扣说明:

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

余额充值