java抽象类代码详解 java抽象类代码详解图

java中什么是抽象类由abstract修饰的方法叫抽象方法;由abstract修饰的类叫抽象类 。抽象的类无法进行实例化,因为他不是具体存在的类,或者说这样的类还不够完善 , 不能直接使用new关键字调用其构造器生成该类的对象 。我们可以使用abstract定义一个抽象类和抽象方法,示例代码如下:
abstract class 类名
{
abstract int 方法名(int x,int y);
}
抽象的方法没有方法体 。需要注意的是在抽象类中既可以有抽象方法,也可以有普通方法,注意抽象方法是没有方法体的(也就是方法后面是没有大括号的) 。凡是继承这个抽象类的实体子类,都必须要实现这个抽象方法 。
我们总结一下抽象类的特点:
(1)抽象类不能被实例化
(2)构造方法 和 static 方法不能是抽象的
(3)父类的抽象方法往往在子类中实现
(4)抽象类可以具有指向子类对象的对象引用
那位师傅给我讲下java里的抽象类的定义方法抽象类与接口紧密相关,它们不能示例化,并且常常部分实现或根本不实现 。抽象类和接口之间的一个主要差别是:类可以实现无限个接口 , 但仅能从一个抽象(或任何其他类型)类继承 。从抽象类派生的类仍可实现接口 。可以在创建组件时使用抽象类,因为它们使您得以在某些方法中指定不变级功能,但直到需要该类的特定实现之后才实现其他方法 。抽象类也制定版本,因为如果在派生类中需要附加功能,则可以将其添加到基类而不中断代码 。
在 Visual Basic 中,抽象类用 MustInherit 关键字表示 。在 C# 中,则使用 abstract 修饰符 。任何所谓不变的方法都可以编码至基类中 , 但在 Visual Basic 中,任何要实现的方法都用 MustOverride 修饰符标记 。在 C# 中,这些方法标记为 abstract 。
==================================
抽象方法和抽象类
面向对象程序通过类的分层结构构建起来. 在单重继承语言如php中, 类的继承是树状的. 一个根类有一个或更多的子类,再从每个子类继承出一个或更多下一级子类. 当然,可能存在多个根类,用来实现不同的功能. 在一个良好设计的体系中,每个根类都应该有一个有用的接口, 可以被应用代码所使用. 如果我们的应用代码被设计成与根类一起工作,那么它也可以和任何一个从根类继承出来的子类合作.
抽象方法是就像子类中一般的方法的占位符(占个地方但不起作用),它与一般方法不同—没有任何代码. 如果类中存在一个或更多抽象方法, 那么这个类就成了抽象类. 你不能实例化抽象类. 你必须继承它们,然后实例化子类. 你也可以把抽象类看成是子类的一个模板.
如果你覆写所有的抽象方法, 子类就变成一个普通的类. 如果没有覆写所有方法, 子类仍是抽象的. 如果一个类中中包含有抽象方法(哪怕只有一个), 你必须声明这个类是抽象的, 在class关键字前加上abstract.
声明抽象方法的语法与声明一般方法不同. 抽象方法的没有像一般方法那样包含在大括号{}中的主体部份,并用分号;来结束.
在例子6.13中, 我们定义了一个含有getarea方法的类shape. 但由于不知道形状不可能确定图形的面积,确良我们声明了getarea方法为抽象方法. 你不能实例化一个shape对象,但你可以继承它或在一个表达式中使用它, 就像例6.13中那样.
如果你建立了一个只有抽象方法的类,你就定义了一个接口(interface). 为了说明这种情况, php中有interface 和implements关键字. 你可以用interface来代替抽象类, 用implements来代替extends来说明你的类定义或使用一个接口. 例如, 你可以写一个myclass implements myiterface. 这两种方法可以依个人偏爱来选择.
/*注:
两种方法即指:
1. abstract class aaa{} (注意aaa中只有抽象方法,没有一般方法)
class bbb extends aaa{} (在bbb中覆写aaa中的抽象方法)
2. interface aaa{}
class bbb implements aaa{} (在bbb中覆写aaa中的抽象方法)
*/
listing 6.13 abstract classes
?php
//abstract root class 抽象根类
abstract class shape
{
abstract function getarea(); //定义一个抽象方法
}
//abstract child class 抽象子类
abstract class polygon extends shape //多边形
{
abstract function getnumberofsides();
}
//concrete class 实体类 三角形类
class triangle extends polygon
{
public $base;
public $height;
public function getarea() //覆写计算面积方法
{
return(($this-base * $this-height)/2);
}
public function getnumberofsides() //覆写边数统计方法
{
return(3);
}
}
//concrete class 实体类四边形
class rectangle extends polygon
{
public $width;
public $height;
public function getarea()
{
return($this-width * $this-height);
}
public function getnumberofsides()
{
return(4);
}
}
//concrete class 实体类 圆形
class circle extends shape
{
public $radius;
public function getarea()
{
return(pi() * $this-radius * $this-radius);
}
}
//concrete root class 定义一个颜色类
class color
{
public $name;
}
$mycollection = array(); //建立形状的集合,放入数组
//make a rectangle
$r = new rectangle;
$r-width = 5;
$r-height = 7;
$mycollection[] = $r;
unset($r);
//make a triangle
$t = new triangle;
$t-base = 4;
$t-height = 5;
$mycollection[] = $t;
unset($t);
//make a circle
$c = new circle;
$c-radius = 3;
$mycollection[] = $c;
unset($c);
//make a color
$c = new color;
$c-name = "blue";
$mycollection[] = $c;
unset($c);
foreach($mycollection as $s)
{
if($s instanceof shape) //如果$s是shape类的实例
{
print("area: " . $s-getarea() .
"brn");
}
if($s instanceof polygon)
{
print("sides: " .
$s-getnumberofsides() .
"brn");
}
if($s instanceof color)
{
print("color: $s-namebrn");
}
print("brn");
}
java中abstract怎么使用啊 , 说的详细点 。举几个有代表的例子使用abstract(抽象)修饰符java抽象类代码详解,可以修饰类和方法 。
1、abstract修饰类 , 会使这个类成为一个抽象类,这个类将不能生成对象实例,但可以做为对象变量声明java抽象类代码详解的类型,也就是编译时类型 , 抽象类就像当于一类java抽象类代码详解的半成品,需要子类继承并覆盖其中的抽象方法 。
2、abstract修饰方法,会使这个方法变成抽象方法,也就是只有声明(定义)而没有实现,实现部分以"java抽象类代码详解;"代替 。需要子类继承实现(覆盖) 。
注意:有抽象方法的类一定是抽象类 。但是抽象类中不一定都是抽象方法,也可以全是具体方法 。
abstract修饰符在修饰类时必须放在类名前 。
abstract修饰方法就是要求其子类覆盖(实现)这个方法 。调用时可以以多态方式调用子类覆盖(实现)后的方法,也就是说抽象方法必须在其子类中实现,除非子类本身也是抽象类 。
注意:父类是抽象类,其中有抽象方法,那么子类继承父类,并把父类中的所有抽象方法都实现(覆盖)java抽象类代码详解了,子类才有创建对象的实例的能力,否则子类也必须是抽象类 。抽象类中可以有构造方法,是子类在构造子类对象时需要调用的父类(抽象类)的构造方法 。
举个简单的例子下面有一个抽象类:
abstract class E{
publicabstractvoidshow();//public abstract 可以省略
}
然后其它类如果继承它通常为了实现它里面的方法:
class F extends E{
void show(){
//写具体实现的代码
}
}
最后再主方法里面定义一个父类引用指向子类对象,就会发生多态现象,比如 :
E e=new F();
e.show();
实际调用了子类里面的show()方法。
扩展资料:
Java中的abstract方法和abstract类的问题:
当知道一个类的子类将不同的实现某个方法时,把该类声明为抽象类很有用,可以共用相同的父类方法,不必再定义 。
抽象类和抽象方法的关系:含有抽象方法的类一定是抽象类,抽象类里不一定含有抽象方法 。
抽象类存在的意义是用来被继承的 。一个类继承了一个抽象类,必须实现抽象类里面所有的抽象方法,否则 , 此类也是抽象类 。
1:用abstract修饰的类表示抽象类 , 抽象类位于继承树的抽象层,抽象类不能被实例化 。
2:用abstract修饰的方法表示抽象方法,抽象方法没有方法体 。抽象方法用来描述系统具有什么功能,但不提供具体的实现 。
abstract 的规则:
1:抽象类可以没有抽象方法,但是有抽象方法的类必须定义为抽象类,如果一个子类继承一个抽象类,子类没有实现父类的所有抽象方法,那么子类也要定义为抽象类,否则的话编译会出错的 。
2:抽象类没有构造方法 , 也没有抽象静态方法 。但是可以有非抽象的构造方法 。
3:抽象类不能被实例化,但是可以创建一个引用变量 , 类型是一个抽象类 , 并让它引用非抽象类的子类的一个实例 。
4:不能用final 修饰符修饰 。
参考资料:
百度百科--abstract
java程序 , 抽象类实现,求具体代码package test;
/**
*
* @author JinnL
【java抽象类代码详解 java抽象类代码详解图】 *父类抽象类
*/
public abstract class Car {
//转弯
abstract void turn();
//启动
abstract void start();
void what(){
System.out.println("this is" this.getClass().getSimpleName());
}
public static void main(String[] args) {
/**
* 方法入口
*/
Car[] cars ={new Bicycle(),newAutomobile(),new GasAutomobile(),new DieselAutomobile()};
for (Car car : cars) {
car.start();
}
}
}
class Bicycle extends Car{
@Override
void turn() {
System.out.println("this is" this.getClass().getSimpleName());
}
@Override
void start() {
System.out.println("this is" this.getClass().getSimpleName());
}
voidwhat(){
}
}
classAutomobile extends Car{
@Override
void turn() {
System.out.println("this is" this.getClass().getSimpleName());
}
@Override
void start() {
System.out.println("this is" this.getClass().getSimpleName());
}
}
class GasAutomobile extends Automobile{
//重写startturn
@Override
void turn() {
System.out.println("this is" this.getClass().getSimpleName());
}
@Override
void start() {
System.out.println("this is" this.getClass().getSimpleName());
}
}
class DieselAutomobile extends Automobile{
@Override
void start() {
System.out.println("this is" this.getClass().getSimpleName());
}
voidwhat(){
System.out.println("this is" this.getClass().getSimpleName());
}
}
java请设计一个使用抽象类或接口的示例代码//接口
public interface BankCard {
public void norm();
}
//工商银行实现类
public class ICBCBankCard implements BankCard {
@Override
public void norm() {
// TODO 银行规范
}
public void saveMoney(int money){
//TODO 执行存钱动作
}
public void transfer(String account,int money){
//TODO 执行转账 动作
}
}
//交通银行实现类
public class CommunicationsBankCard implements BankCard {
@Override
public void norm() {
// TODO 银行规范
}
public void saveMoney(int money){
//TODO 执行存钱动作
}
public void transfer(String account,int money){
//TODO 执行转账 动作
}
}
上面java抽象类代码详解的例子只是申明java抽象类代码详解了通用java抽象类代码详解的规范java抽象类代码详解,如果想让实现类都能实现存钱和转账功能,可以在接口里面声明这两个方法,写一个通用的实现类,实现这些方法,然后具体的子类继承该通用类,这样可以直接继承父类方法,如果不同的银行具体实现不同,可以复写父类中的两个方法 。
java抽象类代码详解的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java抽象类代码详解图、java抽象类代码详解的信息别忘了在本站进行查找喔 。

    推荐阅读