~~~
/*
abstract:是一个修饰符
可以修饰方法,类
1.当我们多个类存在相同的功能,但是功能的主体不同,这时我们
进行向上抽取,只抽取功能的定义,不抽取功能的主体
抽象类的特点:
1.抽象方法一定要在抽象类中
2.抽象类和抽象方法必须要被abstract关键字修饰
3.抽象的类是不能被创建对象,因为调用抽象的方法没意义
4.抽象类中的方法要被使用,必须由子类重写抽象类中的方法,然后创建子类对象调用
5.抽象类中可以定义非抽象的方法,有时候我们需要此类不能被new关键字创建时,可以用
abstract将此类变成抽象类
6.子类如果只重写一部分的抽象方法,那么该子类还是一个抽象类,如果抽象类的方法要被使用,子类
必须重写抽象类中的所有方法
值得注意:
抽象类和普通的类没有太大的不同。
1.抽象类无法通过new关键字创建对象
2.抽象类里面可有抽象的方法
*/
~~~
~~~
package obj.c3;
abstract class Animal{
abstract void sing();
}
class Cat extends Animal{
void sing(){
System.out.println("喵喵唱歌");
}
}
class Dog extends Animal{
void sing(){
System.out.println("汪汪唱歌");
}
}
public class Test {
public static void main(String[] args){
Animal c=new Cat();
c.sing();
}
}
~~~
模板方法设计模式
~~~
package obj.c4;
/**
求一段代码运行所花费的时间
原理:结束时间-开始时间
System.currentTimeMillis()//返回以毫秒为单位的当前时间。
*/
abstract class Demo{//abstract防止该类被new关键字创建
public final void getTime(){//final防止该方法被重写
long start =System.currentTimeMillis();//1秒=1000毫秒
function();
long stop =System.currentTimeMillis();
System.out.println("共花费了"+(stop-start));
}
public abstract void function();//提供给外界重写的抽象方法
}
class Demo1 extends Demo{
public void function(){
for(int i=0;i<1000;i++){
System.out.println("f");
}
}
}
public class Test {
public static void main(String[] args) {
Demo1 a=new Demo1();
a.getTime();
}
}
~~~
- 书写心得
- 1.初识Java
- 2.变量、数据类型和运算符
- 实例:数据的输入
- 实例:变量互换
- 3.条件选择结构
- 案例:判断年份是否为闰年
- 案例:生成随机数
- 实例:剪刀石头布
- 4.循环结构
- 实例:猜数字游戏
- Myeclipse
- 实例:九九乘法表
- 实例:日历
- 5.数组
- JVM内存分析
- 键盘录入赋值数组
- 数组的length属性
- 数组的最大值(打擂台)
- 数组的排序
- 数组复制算法
- 数组的查找算法(搜索)
- 数组的插入算法
- 数组的冒泡算法
- 数组的选择排序
- 多维数组
- 实例:学生成绩管理系统
- 类和对象
- 概念
- 内存分析
- 创建类和对象
- 面向对象与内存分析
- 有参数无(有)返回值的调用
- 成员变量
- return和多参方法
- toString方法
- this关键字
- 封装
- 方法的重载
- 构造方法
- 阶段性总结
- 实例:学生管理系统
- Test.java
- Student.java
- Admin.java
- 构造代码块及构造函数之间的调用
- main方法和静态应用工具类及classpath
- static关键字
- 文档注释和静态代码块及单例模式
- 继承
- 多态
- 匿名对象和toString()和equals及final
- 抽象类和模板方法设计模式
- 接口
- 包机制和包与包之间的访问权限和jar包