Java抽象类

涎涎原创约 840 字大约 3 分钟...JavaJava

105-Java抽象类.mdopen in new window

注意

本博文仅供学术研究和交流参考,严禁将其用于商业用途。如因违规使用产生的任何法律问题,使用者需自行负责。

  • 抽象类和抽象方法的概念
    • 抽象类是抽象方法和非抽象方法的集合
[访问权限修饰符]  abstract   class   类名 {
                             ……
} 
  • 特殊情况
    • 全部是抽象方法
    • 全部为非抽象方法
abtract class A {
      String   name; 
      abstract int method1(int a, int b); 
      void  sayHi( ){
            System.out.println(“Hello!”);
}
  • 抽象方法
    • 只有方法声明,没有方法实现的方法
[访问权限修饰符]  abstract   返回值类型    抽象方法名 (参数列表) ;
abstract class A {
     
  abstract int method1(int a, int b);
}
  • 抽象类的规则
    • 注意:
      • 抽象类不能被实例化;
      • 其包含的抽象方法必须在其子类中被实现,否则该子类只能声明为abstract;
      • 抽象方法不能为static;
    • 在下列情况下,一个类必须声明为抽象类:
      • 当一个类的一个或多个方法是抽象方法时;
      • 当类是一个抽象类的子类,并且没有实现父类的所有抽象方法,即只实现部分;
      • 当一个类实现一个接口,并且不能为全部抽象方法都提供实现时;

给定以下代码:

public abstract class Test{
    public abstract void methodA();
    public abstract void methodB(){
        System.out.println("Hello");
    }
}
执行下列哪些操作后,可以让代码通过编译?
A.对methodA方法添加方法体
B.将5~7行,用“;”代替
C.删除class前的abstract关键字
D.删除methodA方法前的abstract关键字
E.删除methodB方法前的abstract关键字

答案:BE

示例代码

package 抽象类;
/**
 * OrderDao对Order进行增删改查(CRUD)的方法
* <p>Title: OrderDao</p>  
* <p>Description: </p>  
* @author xianxian 
* @date 2019年7月6日
 */
public abstract class OrderDao {//abstract抽象

	/**
	 * 1.抽象类中可以没有抽象方法
	 * 
	 * 2.如果一个类中有抽象方法,那么这个类必须是抽象类
	 * 
	 * 3.如果子类没有实现该抽象方法,那么子类也必须声明为抽象类
	 * 
	 * 4.
	 */
	public abstract void getOrder();
	
	
}
package 抽象类;

public abstract class OrderDaoImp1 extends OrderDao {

//	@Override
//	public void getOrder() {
//
//	}

}
package 抽象类;

public class OrderDaoImp2 extends OrderDao {

	@Override
	public void getOrder() {

	}

}
package 抽象类;

public class OrderSunzi extends OrderDaoImp1 {

	@Override
	public void getOrder() {
		System.out.println("getOrder()。。。。");
	}

}
package 抽象类;

public class StudentImp implements StudentInterface {

	/**
	 * 一个类如果实现接口必须实现接口里的所有方法
	 * 如果一个类里有未实 现接口的方法那么只有abstract
	 * 
	 * 加咯abstract会带来一个新的问题
	 * 这个类是不能被实例化的,除非它再生一个子类
	 */
	@Override
	public void addStudent() {
		// TODO Auto-generated method stub

	}

	@Override
	public void deleteStudent() {
		// TODO Auto-generated method stub

	}

	@Override
	public void updateStudent() {
		// TODO Auto-generated method stub

	}

}
package 抽象类;

public interface StudentInterface {

	public void addStudent();
	
	public void deleteStudent();
	
	public void updateStudent();
}
package 抽象类;

public class Test {

	public static void main(String[] args) {
		//抽象类不被实例化
		//OrderDao dao = new OrderDao();
		//若非要实例化,那么可以实例化其子类
//		OrderDao dao1 = new OrderDaoImp1();
		OrderDao dao1 = new OrderSunzi();
		
		OrderDao dao2 = new OrderDaoImp2();
		
		
	}
}

分割线


相关信息

以上就是我关于 Java抽象类 知识点的整理与总结的全部内容,另附源码open in new window

上次编辑于:
贡献者: 涎涎
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.4