/*抽象类:在提取父类的过程中,某一个共性方法子类各自不同的实现方式,
* 那么该方法需要修饰为abstract,该类就是抽象类的了
*
*抽象类的特点:
*1:抽象类不能创建对象,因为含有对象的方法
*2:继承了抽象类的子类,没有重写父类中的抽象方法,那么该子类还是抽象类
*3:抽象类一定是父类
*4:抽象类也有构造方法的
抽象类和普通类的区别:
相同点:都是类,都是在描述事物
不同点:
①抽象类不能创建对象,普通类可以创建对象
②抽象可以含有抽象方法,普通类不能含有抽象方法
*5:抽象类不嫩隔阂哪里关键字同时使用?
①不能和final:因为final修饰的方法不能重写,abstract修饰的方法必须能被重写,2者冲突,因此不能同时使用
②不能和static:因为static修饰的方法可以直接通过类名调用,abstract修饰的方法不能通过类名调用
③不能和private:应为priavate修饰的方法不能被子类重写,abstract修饰的方法必须能被重写
6.抽象类一定含有抽象方法吗?
不一定的:含有抽象方法的一定是抽象类,当不希望这个类创建对象时,就可以把该类修饰类abstract抽象类。
*
*例如有2个类,狼类,和父类,他们都有一个行为就是叫
*他们都属于犬类,可以提取一个父类出来,因此有父类犬类
*无法定义是谁叫,因此,会把这个方法抽象,注意:这个类也要是抽象的
*/
package item;
//案例1:狼和狗的共同行为叫,都属于犬科
abstract class Qianke
{
public abstract void haojiao();//没有实现的方法使用abstract来修饰,还不知道是汪汪叫还是嗷嗷叫,
}
class Lang extends Qianke//狼类
{
public void haojiao()
{
System.out.println("嗷嗷叫lang");
}
}
class Dog extends Qianke//狗类
{
public void haojiao()
{
System.out.println("汪汪叫dog");
}
}
public class TestAbstract {
public static void main(String[] args) {
//
Shape s=new Shape();//不能NEW会报错,抽象类不能创建对象
//案例2演示:
Rectangle rle=new Rectangle(6,3);
System.out.println("矩形面积="+rle.getArea());
}
}
//案例2:计算圆形和矩形的面积,//圆形和矩形都一个共性是形状父类,都是求面积
abstract class Shape
{
public abstract double getArea();
}
abstract class Circleyx extends Shape
{
private double radius;
Circleyx(double radius)
{
this.radius=radius;
}
//继承了父类中的抽象方法,含有抽象方法,如果没有重写该抽象方法,那么该类也是抽象类
}
class Rectangle extends Shape
{
private double length;
private double width;
Rectangle(double length,double width)
{
this.length=length;
this.width=width;
}
public double getArea()//重写构造方法后,就可以使此类不是抽象类
{
return this.length*this.width;
}
}
-------------------------------------------------------------------------
/**抽象类案例3: * 需求:公司中程序员有姓名:工号,薪水,工作内容, * 项目经理除了有姓名,工号,薪水,还有奖金,工作内容 * 给出需求进行数据建模、 */ package item; abstract class Employee//分析:程序员和经理都是员工 { private String name;//姓名 private String id;//工号 private double money;//薪水 public Employee(){} public Employee(String name,String id,double money) {//为了方便初始化,因此写构造方法 this.name=name; this.id=id; this.money=money; } public abstract void work();//工作行为 } class Programmer extends Employee //程序员类 { public Programmer(){} public Programmer(String name,String id,double money) { super(name,id,money);//调用类的构造函数 } public void work() { System.out.println("程序员的职责是:写代码"); } } class Manager extends Employee//项目经理类 { private double bonus;//奖金 public Manager(){} public Manager(String name,String id ,double money,double bouns) { super(name,id,money); this.bonus=bouns; } public void work() { System.out.println("项目经理的职责是:管理程序员"); } } public class TestAbstract3 { public static void main(String[] args) { Programmer programmer=new Programmer("张三","1001",15000); programmer.work(); Manager manager=new Manager("李四","1002",25000,500); manager.work(); } } /**演示结果: 程序员的职责是:写代码 项目经理的职责是:管理程序员 * **/
转载请注明原文地址: https://ju.6miu.com/read-971449.html