1.随着继承层次中一个个新子类的定义,类变得越来越具体,而父类则更一般,更通用。类的设计应该保证父类和子类能够共享特征。有时将一个父类设计得非常抽象,以至于它没有具体的实例,这样的类叫做抽象类。
2.用abstract关键字来修饰一个类时,这个类叫做抽象类;
3.用abstract来修饰一个方法时,该方法叫做抽象方法。
抽象方法:只有方法的声明,没有方法的实现。以分号结束:abstract int abstractMethod( int a );
4.含有抽象方法的类必须被声明为抽象类。
5.抽象类不能被实例化。抽象类是用来被继承的,抽象类的子类必须重写父类的抽象方法,并提供方法体。若没有重写全部的抽象方法,仍为抽象类。
6.不能用abstract修饰属性、私有方法、构造器、静态方法、final的方法。
实例一:
package com.atguigu.java; /* * abstract:抽象的,可以用来修饰类、方法 * * 1.abstract修饰类:抽象类 * >不可被实例化 * >抽象类有构造器(凡是类都有构造器) * >抽象方法所在的类,一定是抽象类。 * >抽象类中可以没有抽象方法。 * >当我们设计一个类,不需要创建此类的实例的时候,就可以考虑将其设置为抽象的,由其子类实现这个类的抽象方法。 * * 2.abstract修饰方法:抽象方法 * >格式:没有方法体,包括{}.如:public abstract void eat(); * >抽象方法只保留方法的功能,而具体的执行,交给继承抽象类的子类,由子类重写此方法。 * >若子类继承抽象类,并重写了所有的抽象方法,则此类是一个“实体类”,即可以实例化。 * >若子类继承抽象类,没有重写所有的抽象方法,意味着此类仍有抽象方法,则此类必须声明为抽象类。 * */ public class TestAbstract { // Person p1 = new Person(); // p1.eat(); } abstract class Creator { abstract void breath(); } abstract class Person extends Creator { String name; public abstract void eat(); public abstract void walk(); public String getName() { return name; } public void setName(String name) { this.name = name; } // public void eat() { // System.out.println("吃饭"); // } // // public void walk() { // System.out.println("走路"); // } public Person() { } public Person(String name) { this.name = name; } } class Student extends Person { public void eat() { System.out.println("学生吃饭"); } public void walk() { System.out.println("学生走路"); } @Override void breath() { // TODO Auto-generated method stub } } abstract class Worker extends Person { public void eat() { System.out.println("工人吃饭"); } public void walk() { System.out.println("工人走路"); } }
实例二:
package com.atguigu.java; /* * abstract 不能用来修饰属性、私有方法(private)、构造器、静态方法、final的方法 */ public class TestAbstract1 { } class A1 { // private abstract int i; // 构造器不能被重写 // public abstract A1(); // 子类不能重写声明为private的方法 // private abstract void method1(); // public abstract final void method2(); // public abstract static void method3(); }
练习:
package com.atguigu.test; /* * 编写一个Employee类,声明为抽象类,包含如下三个属性:name,id,salary。 * 提供必要的构造器和抽象方法:work()。对于Manager类来说,他既是员工,还具有奖金(bonus)的属性。 * 请使用继承的思想,设计CommonEmployee类和Manager类,要求类中提供必要的方法进行属性访问。 */ class CommonEmployee extends Employee { @Override public void work() { System.out.println("我是普通员工我要努力工作"); } } class Manager extends Employee { private double bonus; public double getBonus() { return bonus; } public void setBonus(double bonus) { this.bonus = bonus; } @Override public void work() { System.out.println("监督员工工作"); } } 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; } } 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(); } }
相关推荐
但是一个抽象类里不写抽象方法就没有意义了,既然如此,还不如直接写个普通类? 在一个抽象类里可以不声明抽象方法,这在语法上是没问题的,但实际来说,这样是没有任何意义的。也就是说,你为什么会选择写一个抽象...
讲述C抽象类与抽象方法的区别,并通过举例详细说明各自的差别
抽象类与抽象方法由abstract修饰 abstract的使用注意 抽象方法没有方法体 抽象成员只能存在于抽象类中 抽象类可以有非抽象成员(侧重族群的概念) 抽象类的子类必须实现抽象方法体 抽象类you构造函数 抽象类只能...
Java面向对象(高级)-- 抽象类与抽象方法(或abstract关键字)
浅析Java中的抽象类与抽象方法.pdf
343.341.JAVA基础教程_面向对象(下)-抽象类与抽象方法的使用(343).rar
计算机后端-Java-Java核心基础-第15章 面向对象07 06. 抽象类与抽象方法的使用.avi
(3) 抽象类可以但不是必须有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明为抽象类 (4) 具体派生类必须覆盖基类的抽象方法 (5) 抽象派生类可以覆盖基类的抽象方法,也可以不覆盖。如果不覆盖,...
本文实例为大家分享了C#抽象类与抽象方法的具体实现代码,供大家参考,具体内容如下 1.代码 class Program { static void Main(string[] args) { for (int i = 1; i < 10; i++) { if (i % 3 == 1) { ...
java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例...
抽象类与接口 抽象类与接口 抽象类与接口 抽象类与接口
关于虚方法抽象类的应用,虚方法抽象类 抽象类 希望大家喜欢
C#类、接口、虚方法和抽象方法-接口与抽象类的区别实例 C#类、接口、虚方法和抽象方法-接口与抽象类的区别实例
窗体应用程序。一个抽象类几何形状包含抽象求面积方法,三个继承类圆、矩形、三角形实现抽象类求面积方法。
Java抽象类和抽象方法
详细介绍了dot Net中抽象类与接口的区别 3.1 相同点 • 都不能被直接实例化,都可以通过继承实现其抽象方法。 • 都是面向抽象编程的技术基础,实现了诸多的设计模式。 3.2 不同点 • 接口支持多...
1.继承及继承实例 2.方法重写(Overwrite) 3.super关键字 4.方法重载(Overload) 5.final修饰符 6.abstract修饰符 7.抽象类 8.接口 9.接口和抽象类对比 10.接口和抽象类使用场合实例 11.总结
java 抽象类与接口的练习,包括代码及注释,个人笔记
Java抽象类与接口实验报告
抽象类和接口的区别 在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力。abstract class和interface之间在对于抽象类定义的支持...