package cm.aff.abst;
/*
abstract:抽象的,,可以修饰类,方法
1.修饰类: 抽象类:
①不能被实例化
②有构造器的
③凡是类都有构造器
④抽象方法所修饰的类一定是抽象类
⑤抽象类中可以没有抽象方法
⑥不能用abstract修饰属性,私有方法,构造器,静态方法,final的方法
2.修饰方法:抽象方法:
①格式:没有方法体, 包括{ }.如: public abstract void eat();
②抽象方法只保留方法的功能,而具体的执行,交给继承抽象类的子类,由子类重写此抽象方法
③若子类继承抽象类,并重写了所有的抽象方法,则此类是一个 "实体类" ,即可以被实例化
④若子类继承抽象类,没有重写所有的抽象方法,意味着此类中仍有抽象方法,则此类必须声明为抽象的 */
public class TestAbstract {
public static void main(String[] args) {
//Person p1 = new Person();//不能被实例化
//p1.eat();
Student s = new Student();
s.eat();
Person p = new Worker();//多态
p.eat();
}
} abstract class Person {
String name;
public Person(){
}
public Person(String name){
this.name = name;
}
public abstract void eat();
//方法中的语句不能被执行了,里面的语句不要了
//给他一个abstract标识,保留了功能,但没有具体的实现, 得由子类来实现了
public abstract void walk() ;
} class Student extends Person {
public void eat() {
System.out.println("学生吃饭");
}
public void walk() {
System.out.println("学会走路");
}
} class Worker extends Person {
public void eat() {
System.out.println("工人吃饭");
}
public void walk() {
System.out.println("工人走路");
}
}
输出结果:

学生吃饭
工人吃饭

使用练习:

package cm.aff.abst;

public class TestEmployee {
public static void main(String[] args) {
//Manager m = new Manager();
Employee e1 = new Manager();//使用多态 虚拟方法调用,和上面一样效果
e1.work(); Employee e2 = new CommonEmployee();
e2.work();
}
} abstract class Employee{
private String name;
private int id ;
private double salary;
public abstract void work(); public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
} class Manager extends Employee{
private double bonus;
public void work(){
System.out.println("监督工作,提高效率");
}
public double getBonus() {
return bonus;
}
public void setBonus(double bonus) {
this.bonus = bonus;
}
} class CommonEmployee extends Employee{
public void work(){
System.out.println("流水线工作");
}
}
输出结果:

监督工作,提高效率
  流水线工作

最新文章

  1. 浅谈浏览器http的缓存机制
  2. intellij idea使用
  3. GraphX的三大图算法
  4. Linux下GCC和Makefile实例(从GCC的编译到Makefile的引入) 转
  5. HDU-2952 Counting Sheep (DFS)
  6. play app to war
  7. 测试Remoting三种信道Http,Tcp,Ipc和Web Service的访问速度 (转)
  8. linux进程间通信之管道篇
  9. gitignore git提交忽略文件
  10. W3Cschool学习笔记——CSS教程
  11. CSS实现两端对齐效果
  12. cssradius
  13. 【一本通1329:【例8.2】细胞&&洛谷P1451 求细胞数量】
  14. python 写入数据
  15. Mybatis常见问题总结
  16. 基于MNIST数据集使用TensorFlow训练一个包含一个隐含层的全连接神经网络
  17. Cordova - 安装camera插件之后编译错误解决方法!
  18. php开发中遇到的一些问题
  19. WPF 录屏软件研发心得及思路分享(已结束开发)
  20. Socket网络编程--聊天程序(9)

热门文章

  1. C. Fountains
  2. Eating Everything Efficiently(反向dp)
  3. HDU1176(正推DP)
  4. bootstrap4中bootstrap_treeview不显示图标原因以及解决办法
  5. JDK基本库概述
  6. 李婷华 201771010113 《面向对象程序设计(java)》第一周学习总结
  7. Day_08【面向对象】扩展案例2_测试旧手机新手机类,并给新手机实现玩游戏功能
  8. Linux 通过终端命令行切换系统语言
  9. Jekyll 解决Jekyll server本地预览文章not found的问题
  10. AFNetworking 3.0 使用详解 和 源码解析实现原理