Demo9_抽象类

package test02;

public class Demo9_AbstractClass {

public static void main(String[] args) {
Dog d =new Dog();
d.吼叫();
Wolf w=new Wolf();
w.吼叫(); 
Programmer pro =new Programmer("lisi","asass",3400);
pro.work();
Manager man =new Manager("lssdi","sdasd",3400,2893);
man.work();
}

}
//抽象类的特点
/*1.抽象类和抽象方法都需要被abstract修饰,抽象方法一定要定义在抽象类中
*2.抽象类不可以创建实例,调用抽象方法没有意义
*3.只有覆盖了抽象类的所有抽象方法后,其子类才可以实例化,否则还是一个抽象类
*
* 之所以继承,更多地是在思想,是面对共性类型是操作会更简单
* */

/*继承的缺点
* 1.打破封装性
* 解决方法:不让其它类继承该类,就不会存在重写功能打破封装性的问题
* 通过Java中的一个关键字final(最终化)实现
*
* final可以修饰类,方法,变量
* 1.final修饰的是一个最终类,不能再派生子类(final class Fu)
*
* 如果类中出现部分可以重写,部分不可以,只要让指定的方法最终化就可以
* 2.final修饰的方法是最终方法,不可以被重写
*
* 3.final修饰的变量是一个常量,只能被赋值一次
*
* 使用场景
*
* 当程序中一个数据使用时是固定不变,这时为了增加阅读性,可以给该数据起一个名字
* 这就是变量为了保证这个变量不被修改加上final修饰,这就是一个阅读性恒强的常量
* 被final修饰的常量名字母都是大写的,多个单词构成时通过_连接
* */

//他们之间具有共性抽取共性类型:犬科
//都具备吼叫行为,怎么叫不确定,具体由子类确定,这些不具体的功能需要在类中表示出来,通过Java中的关键字abstract抽象
//定义了抽象函数的类也必须是抽象的
//在描述事物时没有足够的信息描述一个事物,这时候事物就是抽象事物

/*
* 细节问题
*
* 1.抽象类一定是一个父类?
* 是。
* 2.抽象类中是否可以不定义抽象方法?
* 可以。为了不让该类创建对象
* 3.抽象类是否有构造函数?
* 有。虽然不能给自己的对象初始化,但是可以给自己的子类初始化
* 4.抽象关键字不可以与那些关键字共存?
* 1.final
* 2.private
* 3.static
*
* 抽象类和一般类差别
* 相同:
* 1.他们都是用来描述事物的
* 2.他们都可以定义属性和行为
* 不同:
* 1.一般类可以具体描述事物
* 抽象类描述事物的信息不具体
* 2.抽象类可以多定义一个成员,抽象函数
* 3,一般类可以创建对象,而抽象类不能创建对象
*
*/
abstract class 犬科
{
abstract void 吼叫();
}
class Dog extends 犬科
{
void 吼叫()
{
System.out.println(“wang”);
}
}
//他们之间具有共性抽取共性类型:犬科
class Wolf extends 犬科
{
void 吼叫()
{
System.out.println(“sfdws S”);
}
}

/*
* 程序员
* 属性: 姓名 工号 薪水
* 行为: 工作
*
* 项目经理
* 属性: 姓名 工号 薪水 奖金
* 行为: 工作
*
* 抽取共性:员工
*
* 发现员工的工作不具体,所以定义一个抽象类,有具体子类决定
* */
abstract class Employee
{
private String name;
private String id;
private double pay;
Employee(String name,String id,double pay)
{
this.name = name;
this.id = id;
this.pay =pay;
}
public abstract void work();
}
class Programmer extends Employee
{

Programmer(String name, String id, double pay) {
    super(name, id, pay);
    // TODO Auto-generated constructor stub
}
public void work()
{
    System.out.println("code.....");
}

}
class Manager extends Employee
{
private double bonus;
public Manager(String name, String id, double pay, double bonus) {
super(name, id, pay);
this.bonus=bonus;//奖金
// TODO Auto-generated constructor stub
}

public void work()
{
    System.out.println("manager.....");
}

}

猜你喜欢

转载自blog.csdn.net/mingxu_W/article/details/81333842