/*
1、抽象类的概述:
动物不应该定义为具体的东西,而且动物中的吃,睡等也不应该是具体的。
我们把一个不是具体的功能称为抽象的功能,而一个类中如果有抽象的功能,该类必须是抽象类。

抽象类的特点:A:抽象类和抽象方法必须用abstract关键字修饰B:抽象类中不一定有抽象方法,但是有抽象方法的类必须定义为抽象类C:抽象类不能实例化因为它不是具体的。抽象类有构造方法,但是不能实例化?构造方法的作用是什么呢?用于子类访问父类数据的初始化D:抽象的子类a:如果不想重写抽象方法,该子类是一个抽象类。b:重写所有的抽象方法,这个时候子类是一个具体的类。抽象类的实例化其实是靠具体的子类实现的。是多态的方式。Animal a = new Cat();
*/
/abstract class Animal //抽象类的声明格式
abstract class Animal {//抽象方法//public abstract void eat(){} //空方法体,这个会报错。抽象方法不能有主体public abstract void eat();public Animal(){}
}//子类是抽象类
abstract class Dog extends Animal {}//子类是具体类,重写抽象方法
class Cat extends Animal {public void eat() {System.out.println("猫吃鱼");}
}class AbstractDemo {public static void main(String[] args) {//创建对象//Animal是抽象的; 无法实例化//Animal a = new Animal();//通过多态的方式Animal a = new Cat();a.eat();}
}
/*

2、抽象类的成员特点:
成员变量:既可以是变量,也可以是常量。
构造方法:有。
用于子类访问父类数据的初始化。
成员方法:既可以是抽象的,也可以是非抽象的。

抽象类的成员方法特性:
A:抽象方法 强制要求子类做的事情。
B:非抽象方法 子类继承的事情,提高代码复用性。

*/
abstract class Animal {public int num = 10;public final int num2 = 20;public Animal() {}public Animal(String name,int age){}public abstract void show();public void method() {System.out.println("method");}
}class Dog extends Animal {public void show() {System.out.println("show Dog");}
}class AbstractDemo2 {public static void main(String[] args) {//创建对象Animal a = new Dog();a.num = 100;System.out.println(a.num);//a.num2 = 200;System.out.println(a.num2);System.out.println("--------------");a.show();a.method();}
}
/*

一个类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?
A:可以。
B:不让创建对象。

abstract不能和哪些关键字共存?
private 冲突
final 冲突
static 无意义

*/
abstract class Fu {//public abstract void show();//非法的修饰符组合: abstract和private//private abstract void show();//非法的修饰符组合//final abstract void show();   //非法的修饰符组合static abstract void show();public static void method() {System.out.println("method");}
}class Zi extends Fu {public void show() {}
}class AbstractDemo3 {public static void main(String[] args) {Fu.method();}
}
/*

3、猫狗案例
/*
猫狗案例

抽象动物类:成员变量:姓名,年龄构造方法:无参,带参成员方法:吃饭();实现:从抽象到具体动物类:成员变量:姓名,年龄构造方法:无参,带参成员方法:吃饭();狗类:继承自动物类重写吃饭();猫类:继承自动物类重写吃饭();

*/

//定义抽象的动物类
abstract class Animal {//姓名private String name;//年龄private int age;public Animal() {}public Animal(String name,int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}//定义一个抽象方法public abstract void eat();
}//定义具体的狗类
class Dog extends Animal {public Dog() {}public Dog(String name,int age) {super(name,age);}public void eat() {System.out.println("狗吃肉");}
}//定义具体的猫类
class Cat extends Animal {public Cat() {}public Cat(String name,int age) {super(name,age);}public void eat() {System.out.println("猫吃鱼");}
}//测试类
class AbstractTest {public static void main(String[] args) {//测试狗类//具体类用法//方式1:Dog d = new Dog();d.setName("旺财");d.setAge(3);System.out.println(d.getName()+"---"+d.getAge());d.eat();//方式2:Dog d2 = new Dog("旺财",3);System.out.println(d2.getName()+"---"+d2.getAge());d2.eat();System.out.println("---------------------------");Animal a = new Dog();a.setName("旺财");a.setAge(3);System.out.println(a.getName()+"---"+a.getAge());a.eat();Animal a2 = new Dog("旺财",3);System.out.println(a2.getName()+"---"+a2.getAge());a2.eat();//练习:测试猫类}
/*

4、学生案例

 具体事务:基础班学员,就业班学员共性:姓名,年龄,班级,学习,吃饭
分析:基础班学员成员变量:姓名,年龄,班级成员方法:学习,吃饭就业班学员成员变量:姓名,年龄,班级成员方法:学习,吃饭得到一个学员类。成员变量:姓名,年龄,班级成员方法:学习,吃饭抽象方法---学习(不一样)普通方法--吃饭(一样)实现:学员类基础班学员就业班学员
*/
//定义抽象学员类
abstract class Student {//姓名private String name;//年龄private int age;//班级private String grand;public Student() {}public Student(String name,int age,String grand) {this.name = name;this.age = age;this.grand = grand;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getGrand() {return grand;}public void setGrand(String grand) {this.grand = grand;}//学习public abstract void study();//吃饭public void eat() {System.out.println("学习累了,就该吃饭");}
}//具体基础班学员类
class BasicStudent extends Student {public BasicStudent() {}public BasicStudent(String name,int age,String grand) {super(name,age,grand);}public void study() {System.out.println("基础班学员学习的是JavaSE");}
}//具体就业班学员类
class WorkStudent extends Student {public WorkStudent() {}public WorkStudent(String name,int age,String grand) {super(name,age,grand);}public void study() {System.out.println("就业班学员学习的是JavaEE");}
}class AbstractTest3 {public static void main(String[] args) {//我仅仅测试基础班学员//按照多态的方式测试Student s = new BasicStudent();s.setName("林青霞");s.setAge(27);s.setGrand("1111");System.out.println(s.getName()+"---"+s.getAge()+"---"+s.getGrand());s.study();s.eat();System.out.println("--------------");s = new BasicStudent("武鑫",48,"1111");System.out.println(s.getName()+"---"+s.getAge()+"---"+s.getGrand());s.study();s.eat();//就业班测试留给自己玩}/*

5、公司员工

      假如我们在开发一个系统时需要对员工类进行设计,员工包含3个属性:姓名、工号以及工资。
经理也是员工,除了含有员工的属性外,另为还有一个奖金属性。
请使用继承的思想设计出员工类和经理类。要求类中提供必要的方法进行属性访问。分析:普通员工类成员变量:姓名、工号以及工资。成员方法:工作经理类:成员变量:姓名、工号以及工资,**奖金**属性成员方法:工作实现:员工类:普通员工类:经理类:
*/
//定义员工类
abstract class Employee {//姓名、工号以及工资private String name;private String id;private int salary;public Employee() {}public Employee(String name,String id,int salary) {this.name = name;this.id = id;this.salary = salary;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getId() {return id;}public void setId(String id) {this.id = id;}public int getSalary() {return salary;}public void setSalary(int salary) {this.salary = salary;}//工作public abstract void work();
}//普通员工类
class Programmer extends Employee {public Programmer(){}public Programmer(String name,String id,int salary) {super(name,id,salary);}public void work() {System.out.println("按照需求写代码");}
}//经理类
class Manager extends Employee {//奖金private int money; //bonus 奖金public Manager(){}public Manager(String name,String id,int salary,int money) {super(name,id,salary);this.money = money;}public void work() {System.out.println("跟客户谈需求");}public int getMoney() {return money;}public void setMoney(int money) {this.money = money;}
}class AbstractTest4 {public static void main(String[] args) {//测试普通员工Employee emp = new Programmer();emp.setName("林青霞");emp.setId("czbk001");emp.setSalary(18000);System.out.println(emp.getName()+"---"+emp.getId()+"---"+emp.getSalary());emp.work();System.out.println("-------------");emp = new Programmer("林青霞","czbk001",18000);System.out.println(emp.getName()+"---"+emp.getId()+"---"+emp.getSalary());emp.work();System.out.println("-------------");/*emp = new Manager();emp.setName("刘意");emp.setId("czbk002");emp.setSalary(8000);emp.setMoney(2000);*///由于子类有特有的内容,所以我们用子类来测试Manager m = new Manager();m.setName("刘意");m.setId("czbk002");m.setSalary(8000);m.setMoney(2000);System.out.println(m.getName()+"---"+m.getId()+"---"+m.getSalary()+"---"+m.getMoney());m.work();System.out.println("-------------");//通过构造方法赋值m = new Manager("刘意","czbk002",8000,2000);System.out.println(m.getName()+"---"+m.getId()+"---"+m.getSalary()+"---"+m.getMoney());m.work();}

版权声明:本文为小平果原创文章,转载请注明:http://blog.csdn.net/i10630226

转载于:https://www.cnblogs.com/dingxiaoyue/p/4948237.html

Java基础之抽象类相关推荐

  1. 初学Java基础学习——抽象类和接口的区别

    初学Java基础学习--抽象类和接口的区别 一.关键字 1)抽象类的关键字 abstract class A{//定义一个抽象类: } class Test extends A{//子类使用exten ...

  2. java基础之抽象类和接口

    一.抽象: **抽象类(abstract class):**使用了abstract关键字所修饰的类叫做抽象类.抽象类无法实例化,也就是说,不能new出来一个抽象类的对象(实例). **抽象方法(abs ...

  3. 3、java基础:抽象类与接口的区别

    抽象类 我们都知道在面向对象的领域一切都是对象,同时所有的对象都是通过类来描述的,但是并不是所有的类都是来描述对象的.如果一个类没有足够的信息来描述一个具体的对象,而需要其他具体的类来支撑它,那么这样 ...

  4. java基础-类-抽象类-接口(自学笔记)

    一.类 class 定义:具有相同属性(特性)和方法(行为)的一类事物 的抽象的总称 例如:人类,动物,车,屌丝类.是一种类别,世界上所有的事物都可以分类,在计算机中java都能进行对应和体现 类的三 ...

  5. Java基础---认识抽象类

    抽象类 abstract:抽象的 , 可以修饰类和方法 可以定义抽象方法的类,就是抽象类 格式:abstract class 类名 {public abstract 返回值类型 方法名():} 抽象方 ...

  6. Java基础概念 | 抽象类与接口

    抽象类与接口 定义 用法 定义 抽象类:包含抽象方法的类. 包含抽象方法的类必须通过abstract关键字声明为抽象类,否则编译器会报错. 抽象方法需要通过abstract关键字进行声明. 抽象类可以 ...

  7. Java基础篇------抽象类详解

  8. 第一阶段>>>Java基础进阶 OOP/Reflect/注解/IO流/API核心

    目录 >>>java基础01-结构以及类型 >>>java基础02-初识数组 >>>java基础03-面向对象OOP >>>ja ...

  9. 菜鸟学习笔记:Java基础篇5(抽象类与接口、回调函数、内部类)

    菜鸟学习笔记:Java面向对象篇下 抽象类 接口 回调函数 内部类 成员内部类 匿名内部类 抽象类 通过前面知识的学习,抽象类这个概念应该不难理解,但比较容易和后面要说的接口混淆,而且在面试中也比较爱 ...

最新文章

  1. 数据库中的索引技术——哈希索引
  2. GMIS 2017 大会余凯演讲:深度学习引领驾驶革命
  3. leetcode 551. 学生出勤记录 I(Java版)
  4. 5W1H系列 | Nacos 帮我们解决什么问题?(配置管理篇)
  5. c语言switch同时比较多个变量,C语言学习if和switch分支选择结构
  6. 单片机语音识别源码与资料(ASR M08-B模块arduino与51驱动)
  7. 以前是传xml的吗_李菲儿参加《浪姐2》,与黄晓明同台互动!不怕baby吃醋吗?...
  8. 第15条:使可变性最小化
  9. 盲盒商城源码|盲盒商城app开发的模式玩法、功能以及开发流程介绍,多套盲盒源码现成案例。让您在了解盲盒项目开发中少走弯路,少踩坑。
  10. python将pdf转成excel_wpspdf转换成excel Python转换PPT为PDF
  11. 计算机保研英语,计算机保研面试英文自我介绍
  12. Mac下解决硬盘无法读取问题Mounty for NTFS - 免费让 Mac 原生支持移动硬盘/U盘 NTFS 读写的必备驱动应用
  13. dva的简单使用(一)
  14. biobakery流程之有参宏基因组分析
  15. python飞机如何使用机器人
  16. Redis 的 MOVED 转向与 ASK 转向
  17. 普元mobile_普元Mobile上架AppStore被拒合集(持续更新)
  18. 【Flink】Specifying keys via field positions is only valid for tuple data types.
  19. Python3 获取CSDN博客文章的阅读数和评论量
  20. 八、快速生成树协议RSTP配置

热门文章

  1. 动人配乐是如何炼成的?带您了解《花之灵》背景原声的幕后制作秘辛
  2. pmp每日三题(2022年3月1日)
  3. Git下载与使用(Git地址由CSDN提供)
  4. 唐僧肉长生不老到底隐藏了哪些骗局?唐僧的妈妈真的吃过唐僧肉吗?
  5. [网络流24题]太空飞行计划
  6. Struts自定义拦截器拦截器工作原理
  7. hdu 4679 树的直径
  8. 在控制台读取用户输入密码,你会么?
  9. Visual Studio 常见问题及解决方案(持续更新)
  10. [每天进步一点 -- 流水账]第1周