/*
-
1. 抽象类不能被实例化(初学者很容易犯的错),如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。
-
2. 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
-
3. 抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。
-
4. 构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。
-
5. 抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类
-
6.父类中也存在构造器但不能造对象,子类中有构造器会直接或间接的调用父类构造器
-
7.abstrct不能修饰的结构有:属性 代码块 构造器
-
8.abstract 不能修饰final类,也不能修饰static的方法还有不能修饰私有方法进行搭配。因为abstract 修饰的方法必须进行重写才能使用,而final(最终的不能改了)static(静态修饰) 还有私有方法不能调用,导致不能重写。
*/
abstract class test
{
// public void eat(){
// System.out.println("人吃饭");
// }
public void eat();//抽象类方法不能有方法体,且对应的类必须包含abstract类
}
class A extends test{
public void eat(){//抽象类方法的重写
System.out.println("人吃饭");
}
}
//举例-------------------------------------------------------------------------------------
public class ShiLiTest {
public static void main(String[] args) {
TempLate t1 = new test();//或者直接test t1 = new test();
t1.spendtime();//调用后会到父类中的code(),然后运行
}
}
abstract class TempLate{
//计算某段抽象类代码的时间(abstract)
public void spendtime(){
long start = System.currentTimeMillis();//记录开始时间
code();//调用抽象代码//继承后此方法为子类的重写代码
long end = System.currentTimeMillis();//记录结束时间
System.out.println("花费的时间为:" +(end-start));
}
public abstract void code();
}
class test extends TempLate{//继承父类修改方法
public void code(){
//求1000以内质数所需时间(毫秒)
for (int i = 2; i <= 1000; i++) {
Boolean isFlag=true;
for (int j = 2; j <=Math.sqrt(i); j++)
{
if(i%j==0){
isFlag=false;
break;}
}if(isFlag)
System.out.println(i);
}
}
}
//以上便是运用