java实验六 抽象方法和抽象类
Java面向对象程序设计抽象方法与抽象类
• 2.抽象类不能被实例化; • 3.如果从一个抽象类继承,而且想生成新类型的一个对
象,就必须实现抽象基类中的每一个抽象方法,否则, 派生类也必须使用abstract修饰成为抽象类。 • 4.抽象类对象变量可以用来引用派生类的对象;
– 分析方法callSound的参数类型
2020/4/26
• 结论
– 虽然抽象类不能被实例化,但可以 将抽象类的非抽象子类的实例对象
2020/4/26
又一实例
Shape area()
Circle radius area()
Rectangle Length width area()
• 抽象类的一种极端情况:
2020/4/26
本单元教学内容
• 抽象方法 • 抽象类 • 接口
2020/4/26
知识回顾
• 使用多态特性修改Person程序的测 试程序;
• 思考:
– 父类中的eat()方法的实现有实际意 义吗?
– 父类中的eat()方法可以去掉吗?
2020/4/26
抽象方法、抽象类
• 当父类的某些方法的实现并没有什么实际的意义时,可以将 该方法定义为抽象方法,即只定义该方法的头部,而不定义 方法体(方法的实现)。 – 1.定义抽象方法只需在方法定义中加入关键字: abstract 如:public abstract String eat(); – 2.包含抽象方法的类必须被定义为抽象类
class Circle implements Shape{ //Circle类实现
}
2020/4/26
2020/4/26
抽象类和抽象方法
抽象类和抽象方法一、定义:java中可以定义的一些不含方法体的方法,它的方法体的实现交给该类的子类根据自己的情况去实现,这就是抽象方法。
包含抽象方法的类就叫做抽象类。
一个抽象类可以有一个或多个抽象方法。
二、抽象规则:1、抽象类和方法必须用abstract来修饰;2、抽象类不能被实例化;3、抽象方法只需声明,无需实现,抽象方法一定调用子类重写后的非抽象的方法;4、抽象类有构造但不能被调用;5、含有抽象方法的类必须声明为抽象类,抽象类的子类必须覆盖所有的抽象方法后才能被实例化,否则这个类还是个抽象类。
注意:抽象方法不能为private的,因为抽象方法没有具体实现,需要在子类中继承并重写来实现具体实现。
抽象方法必须重写实现其具体的功能。
【TestAbstract.java】package day7am;public abstract class TestAbstract {public abstract void test();//含有抽象方法的类一定是抽象类。
public static void main(String[] args) {}}三、抽象方法的继承与实现当某类继承抽象类时,如果其本身不是抽象类时,则必须实现所继承抽象类中的抽象方法。
如,具有启动(startup)方法的抽象车辆类Car,其每中子类都必须实现其自己的、专属于某种类型车辆的具体启动(startup)方法,下边例子就说明了。
【TestAbstract.java】package Pra;//定义抽象类Carabstract class Car{//定义抽象方法startUppublic abstract void startUp();}//定义抽象类Audi并使该类继承自Carabstract class Audi extends Car{//定义抽象方法turbopublic abstract void turbo();}//定义非抽象类Audi_A6继承自Audiclass Audi_A6 extends Audi{//实现startUp方法public void startUp(){System.out.println("调用了奥迪A6的启动功能!!!");}//实现turbo方法public void turbo(){System.out.println("调用了奥迪A6的加速功能!!!");}}//定义非抽象类Audi_A8继承自Audiclass Audi_A8 extends Audi{//实现startUp方法public void startUp(){System.out.println("调用了奥迪A8的启动功能!!!");}//实现turbo方法public void turbo(){System.out.println("调用了奥迪A8的加速功能!!!");}}public class TestAbstract{public static void main(String[] args){//创建Audi_A6对象并使该类引用a6指向该对象Audi_A6 a6=new Audi_A6();//调用Audi_A6对象中的方法a6.startUp();a6.turbo();//创建Audi_A8对象并使该类引用a8指向该对象Audi_A8 a8=new Audi_A8();//调用Audi_A8对象中的方法a8.startUp();a8.turbo();}}程序运行结果:-----------------------------调用了奥迪A6的启动功能!!!调用了奥迪A6的加速功能!!!调用了奥迪A8的启动功能!!!调用了奥迪A8的加速功能!!!-----------------------------上面的例子里定义了4个类,其中Car和Audi为抽象类,他们分别代表轿车和奥迪轿车,故不适具体类,因为轿车和奥迪轿车还有很多子类。
Java-Applet
Java的 Java的type conversion
• 种类
– Identify conversion, Widening primitive conversion, conversion, Narrowing primitive conversion, conversion, Widening reference conversion, Narrowing conversion, reference conversion, String conversion conversion,
方法的覆盖和域的隐藏有区别 方法的覆盖和域的隐藏有区别
class A { int i = 1; int f() {return i; } } class B extends A ( int i = 2; int f() {return -i;} } public class override_vs_hide { public static void main(String[] args) { B b = new B(); System.out.println(b.i); // 2
例子
X x = new X(); SubX sx = new SubX(); Identity, Assignment conversion x = sx; Widening reference, Assignment conversion SubX sxx = (SubX) X; Narrowing reference, Assignment conversion (runtime) Integer num = (Integer) sxx; ClassCastException
• C1, C2做方法覆盖; 可用, 但概念不清, 动态方 C2做方法覆盖; 可用, 但概念不清, 法查找费时
Java抽象类、抽象方法详解
Java抽象类、抽象⽅法详解⽬录1. 概述类⽤于描述现实⽣活中⼀类事物。
类中有属性、⽅法等成员。
⽗类中的⽅法,被它的⼦类们重写,⼦类各⾃的实现都不尽相同。
那么⽗类的⽅法声明和⽅法主体,只有声明还有意义,⽽⽅法主体则没有存在的意义了。
某种情况下,⽗类只能知道⼦类应该具备⼀个怎样的⽅法,但是不能够明确知道如何实现该⽅法。
只能在⼦类中才能确定如何去实现⽅法体。
例如:所有⼏何图形都应该具备⼀个计算⾯积的⽅法。
但是不同的⼏何图形计算⾯积的⽅式不同。
我们把没有⽅法主体的⽅法称为抽象⽅法。
Java语法规定,包含抽象⽅法的类就是抽象类。
2. 抽象⽅法抽象⽅法:只有⽅法的声明,没有⽅法体,以分号 ; 结尾,使⽤abstract关键字修饰定义格式:修饰符 abstract 返回值类型⽅法名(参数列表);代码举例:public abstract void run();抽象⽅法不能⽤private、final、static、native修饰3. 抽象类抽象类:包含抽象⽅法的类。
如果⼀个类包含抽象⽅法,那么该类必须是抽象类,使⽤abstract关键字修饰定义格式:public abstract class 类名 {//抽象类中可以包含变量、常量,抽象⽅法,⾮抽象⽅法}代码举例:public abstract class Person {public abstract void work();}抽象类的使⽤抽象类不能实例化,不能直接创建对象。
抽象类是⽤来被继承的,继承抽象类的⼦类必须重写⽗类所有的抽象⽅法。
否则,该⼦类也必须声明为抽象类,使⽤abstract关键字修饰抽象类也是类,因此原来类中可以有的成员,抽象类都可以有,那么抽象类不能直接创建对象,为什么还有构造器呢?供⼦类调⽤,⼦类创建对象时,需要为从⽗类继承的属性初始化。
抽象类不能使⽤final修饰public class Teacher extends Person {public void work() {System.out.println("讲课");}}public class AbstractClassTest {public static void main(String[] args) {// 创建⼦类对象Teacher t = new Teacher();// 调⽤run⽅法t.work();}}输出结果:讲课此时的⽅法重写,是⼦类对⽗类抽象⽅法的完成实现,我们将这种⽅法重写的操作,叫做实现⽅法。
java abstract类实现6个方法
一、Java中的Abstract类概述在Java编程语言中,Abstract类是一种特殊的类,它不能被实例化,只能被用作其他类的父类。
Abstract类中可以包含抽象方法和非抽象方法,而且子类必须实现Abstract类中的抽象方法。
本文将针对Java 中的Abstract类以及实现Abstract类中的6个方法展开讨论。
二、创建一个Abstract类要创建一个Abstract类,需要使用关键字abstract来修饰类。
并且Abstract类通常包含抽象方法,抽象方法使用关键字abstract修饰,并且不包含方法体。
三、实现6个方法假设我们有一个名为"AbstractClass"的Abstract类,其中包含6个抽象方法。
现在我们来实现这6个方法,让具体的子类来继承AbstractClass,并且实现其中的抽象方法。
1. 实现抽象方法一我们创建一个"ConcreteClassA"的具体子类来继承AbstractClass,并且实现抽象方法一。
在具体子类中,我们需要重写并实现抽象方法一,以满足具体子类的需求。
2. 实现抽象方法二接下来,我们创建一个"ConcreteClassB"的具体子类来继承AbstractClass,并且实现抽象方法二。
同样地,我们需要在具体子类中重写并实现抽象方法二,确保满足具体子类的需求。
3. 实现抽象方法三我们创建一个"ConcreteClassC"的具体子类来继承AbstractClass,并且实现抽象方法三。
在具体子类中,我们需要重写并实现抽象方法三,以满足具体子类的需求。
4. 实现抽象方法四我们创建一个"ConcreteClassD"的具体子类来继承AbstractClass,并且实现抽象方法四。
同样地,我们需要在具体子类中重写并实现抽象方法四,确保满足具体子类的需求。
java抽象类和抽象方法
java抽象类和抽象⽅法⼀、什么是抽象类和抽象⽅法 没有具体功能的实现,通过⼦类继承后重写⽅法来实现⼀定约束的类称之为抽象类,抽象类必须被abstract修饰。
抽象⽅法就是只有⽅法声明,没有⽅法体的⽅法。
抽象类的使⽤⼀般通过继承来实现⼆、为什么需要抽象类和抽象⽅法 引⽤抽象⽅法和抽象类,是java提供的⼀种语法⼯具,引导使⽤者正确的使⽤它们,减少误⽤。
相当于对⼦类进⾏⼀定限制。
三、抽象类和抽象⽅法的语法规则及其注意事项1. 抽象类抽象⽅法必须被abstract修饰。
2. 抽象类中可以有普通⽅法,但是有抽象⽅法的类必须是抽象类。
抽象类中的普通⽅法因为不能被创建对象,所以不能使⽤这个普通⽅法。
3. 抽象类除了不能实例化对象之外,类的其它功能依然存在。
4. 抽象⽅法中可以有被static修饰main⽅法,并且可以执⾏。
5. ⼀个类在继承抽象类后,必须实现抽象类中定义的所有抽象⽅法。
除⾮它⾃⼰也声明为抽象类。
6. 抽象⽅法名后⾯直接跟⼀个分号,⽽不是花括号。
四、抽象类和抽象⽅法的实现案例 1、抽象类中可以有普通⽅法,但是有抽象⽅法的类必须是抽象类。
public abstract class Demo01 {public abstract void run();public void test(){}}//编译通过,不报错public class Demo01 {public abstract void run();public void test(){}}//报错:Class 'Demo01' must either be declared abstract or implement abstract method 'run()' in 'Demo01'Abstract method in non-abstract class 2、抽象类除了不能实例化对象public abstract class Demo01 {public abstract void run();public static void main(String[] args) {Demo01 demo01=new Demo01();}} 3、抽象⽅法中可以有被static修饰main⽅法,并且可以执⾏。
JAVA中的抽象类和抽象方法
JAVA中的抽象类和抽象方法Java中的抽象类和抽象方法是面向对象编程中的重要概念。
抽象类是一种特殊的类,不能被实例化,只能作为其他类的父类使用。
抽象方法是一种没有具体实现的方法,只有方法的声明,没有方法体。
抽象类是为了提供一种抽象的数据类型,它包含了一组相关的抽象方法和具体方法。
抽象类的主要作用是为子类提供一个通用的抽象模板,子类必须实现父类中的抽象方法。
抽象类不能被实例化,只能用作其他类的父类,通过继承抽象类来使用其方法和属性。
抽象类一般用于定义一个通用的类,其中一些方法需要子类进行具体实现,而其他方法可以在抽象类中实现。
抽象方法是一种没有具体实现的方法,只有方法的声明,没有方法体。
抽象方法没有方法体,因为它没有具体的功能实现,而是提供了一个方法的声明。
抽象方法必须在抽象类中声明,并且在实现该抽象类的子类中进行具体的实现。
如果一个类包含抽象方法,这个类就必须声明为抽象类。
在使用抽象类和抽象方法时,需要遵循以下规则:1.抽象类不能够被实例化,只能用作其他类的父类。
2.抽象类可以包含抽象方法和具体方法,抽象方法必须在子类中具体实现。
3.子类必须实现父类的抽象方法,否则子类也必须声明为抽象类。
4.抽象类可以包含普通成员变量和方法,也可以包含构造方法。
5.抽象类的子类继承抽象类时,必须实现父类的所有抽象方法。
抽象类和抽象方法的优点包括:1.可以为子类提供一个通用的抽象模板,子类只需要实现具体的抽象方法,可以减少代码的重复。
2.可以规定子类必须实现的方法,增强代码的可读性和可靠性。
3.可以提供一个“约束”机制,限制子类的行为,保证代码的一致性和规范性。
抽象类和抽象方法的应用场景包括:1.在设计框架时,可以定义一些通用的抽象方法,具体的实现由子类完成。
2.在多态性的应用中,可以使用抽象类作为父类,通过不同的子类实现不同的具体功能。
3.在一些业务场景中,一些方法的具体实现可能会因为业务需求的改变而改变,可以将这些方法定义为抽象方法,由子类进行实现。
Java中抽象类和抽象方法
抽象类: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用 来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。 抽象方法:抽象类不能实例化对象,所以抽象类必须被继承,才能被使Байду номын сангаас , 父类包含了子类的常见的 方法,但是由于父类本身是抽象的,所以无法具体实现这些方法,交给子类去实现。这种父类拥有定 义,但是没有具体实现的方法,就是抽象方法。
抽象类和抽象方法的特征: (1)抽象类不能被实例化。 (2)抽象类中可以有,也可以没有抽象方法,抽象类中也可以有普通方法。但是只有要抽象方法,这 个类一定是抽象类。
(3)子类必须重写抽象类中的所有抽象方法。(除非子类仍然还是抽象类)。 (4)抽象类中的抽象方法不需要实现的(而普通的子类重写父类方法,父类需要具体实现)。
在main方法中实例化Programmer,调用Working方法会执行子类中的具体实现。
Programmer p = new Programmer(); p.Meeting(); p.Working();
抽象方法和普通方法重写的区别: (1)抽象方法没有具体实现,普通的重写父类方法有具体实现。 (2)抽象方法子类必须重写,普通的父类方法子类可以重写也可以不重写。
案例:抽象类和抽象方法的基本应用 有一个父类Employee(员工)类:
//abstract关键字表示此类是一个抽象类 public abstract class Employee {
//此方法是一个普通方法 public void Meeting() {
System.out.println("我在努力开会........"); } //此方法使用abstract关键字,是一个抽象方法,只有定义,没有具体实现。 public abstract void Working(); }
java抽象类和抽象方法
java抽象类和抽象⽅法1.抽象的概念2.抽象类和抽象⽅法的使⽤1//抽象⽅法和抽象类的格式:2/*抽象⽅法:就是加上abstract关键字,然后去掉⼤括号,直接分号结束;3抽象类:抽象⽅法所在的类,必须是抽象类才⾏,在class之前的写上abstract即可。
45如何使⽤抽象类和抽象⽅法61.不能直接创建(new)抽象类对象72.必须⽤⼀个⼦类来继承抽象⽗类83.⼦类必须覆盖重写抽象⽗类当中所有的抽象⽅法9覆盖重写实现:⼦类去掉抽象⽅法的abstract关键字,然后补上⽅法体⼤括号104.创建⼦类对象进⾏使⽤*/1112public abstract class Animals {13//这是⼀个抽象⽅法,代表吃东西,但是具体吃什么(⼤括号的内容)不确定14public abstract void eat();15//这是普通的成员⽅法16public void normalMethod(){17 System.out.println("这是普通成员⽅法");1819 }20 }21222324public class Cat extends Animals{25 @Override//⽗类抽象⽅法的重写26public void eat(){27 System.out.println("猫吃鱼");28 }29 }303132public class DemoAbstract {33public static void main(String[] args) {34 Cat cat = new Cat();35 cat.eat();36 cat.normalMethod();37 }38 }3.抽象⽅法和抽象类的注意事项3.11//抽象类中,可以有构造⽅法,是供⼦类创建对象时,初始化⽗类成员使⽤的23public abstract class Fu001 {4public Fu001(){5 System.out.println("⽗类抽象类构造⽅法执⾏");6 }7public void normalMethod(){8 System.out.println("普通成员⽅法");9 }1011public abstract void eat();12 }131415public class Zi001 extends Fu001 {16public Zi001(){17//super();18 System.out.println("⼦类抽象⽅法执⾏");19 }20 @Override21public void eat(){22 System.out.println("孩⼦吃饭");23 }24 }252627public class DemoFuZi {28public static void main(String[] args) {29 Zi001 zi = new Zi001();30 zi.eat();31 zi.normalMethod();32 }33 }3.2抽象类中的⼦类,必须重写抽象⽗类中所有的抽象⽅法,否则编辑⽆法通过会报错。
java抽象类和抽象方法实验报告
}
}
实验结果:
实验总结(结论或问题分析):
本次实验是通过使用抽象类和抽象方法来写程序,实验帮助我熟悉了如何定义抽象类使用抽象方法,对上课讲的知识进一步了解。
实验成绩
任课教师签名
实验报告
课程名称
面向对象程序设计
实验名称
实验五、抽象类和抽象方法
日期
2018-4-28
学生学号
姓名
班级
实验目的:
通过本次实验,要求学生能进一步掌握抽象类和抽象方法的概念,熟练定义抽象类和抽象方法。
实验条件:
电脑一台、能上网查阅资料。
首先定义基本几何图形的抽象基类(Shape),然后定义Shape的派生类Circle(圆形)、Square(正方形)和Triangle(三角形)。要求通过抽象方法和方法覆盖来计算各种图形的面积和周长。(提示:求三角形的面积用海伦公式: ,其中a,b,c是三角形的边长,L=(a+b+c)/2)
this.r=r;
}
publicdoublegetR() {
returnr;
}
publicvoidsetR(doubler) {
this.r= r;
}
doublearea() {
//TODOAuto-generated method stub
returnMath.PI*Math.pow(r, 2);
returnname;
}
publicvoidsetName(String name) {
= name;
}
abstractdoublearea();
abstractdoublelength();
JAVA中的抽象类和抽象方法
JAVA中的抽象类和抽象方法抽象类和抽象方法是面向对象编程语言中的重要概念,在JAVA中也有着重要的地位。
本文将在1200字以上详细介绍JAVA中的抽象类和抽象方法。
1.抽象类的概念抽象类是指定义了一些具体实现和一些不具体实现的方法的类。
它是一种特殊的类,不能直接实例化,只能作为父类被继承。
抽象类的主要作用是为它的子类提供一个约定,告诉子类必须实现哪些方法。
抽象类在JAVA中使用"abstract"关键字声明,并且抽象类中可以包含抽象方法以及普通的具体实现方法。
2.抽象类的定义和使用在JAVA中,定义一个抽象类需要使用关键字"abstract"。
例如:```javapublic abstract class Animalpublic abstract void sound(;public void movSystem.out.println("移动");}```在上述代码中,Animal是一个抽象类,它有一个抽象方法sound(和一个具体方法move(。
抽象方法没有具体的实现,只是声明了方法的存在,需要子类去实现。
具体方法有具体的实现,可以直接使用。
使用抽象类的时候,需要通过继承来实现。
子类必须实现抽象类中的所有抽象方法。
例如:```javapublic class Dog extends Animalpublic void sounSystem.out.println("汪汪");}```在上述代码中,Dog是Animal的子类,它必须实现抽象类Animal中声明的抽象方法sound(。
否则,编译器会报错。
3.抽象类的特点和使用场景抽象类有以下几个特点:-抽象类不能被实例化,只能作为父类被继承。
-抽象类可以包含抽象方法和具体方法。
-子类必须实现父类中的所有抽象方法。
抽象类适用于以下场景:-抽象类可以作为一种设计约定,告诉子类必须实现哪些方法。
Java之关键字abstract(抽象类与抽象方法)
Java之关键字abstract(抽象类与抽象⽅法)/** abstract关键字的使⽤* 1.abstract:抽象的* 2.abstract可以⽤来修饰的结构:类、⽅法** 3. abstract修饰类:抽象类* > 此类不能实例化* > 抽象类中⼀定有构造器,便于⼦类实例化时调⽤(涉及:⼦类对象实例化的全过程)* > 开发中,都会提供抽象类的⼦类,让⼦类对象实例化,完成相关的操作*** 4. abstract修饰⽅法:抽象⽅法* > 抽象⽅法只有⽅法的声明,没有⽅法体* > 包含抽象⽅法的类,⼀定是⼀个抽象类。
反之,抽象类中可以没有抽象⽅法的。
* > 若⼦类重写了⽗类中的所有的抽象⽅法后,此⼦类⽅可实例化* 若⼦类没有重写⽗类中的所有的抽象⽅法,则此⼦类也是⼀个抽象类,需要使⽤abstract修饰*/public class AbstractTest {public static void main(String[] args) {//⼀旦Person类抽象了,就不可实例化// Person p1 = new Person();// p1.eat();}}abstract class Creature{public abstract void breath();}abstract class Person extends Creature{String name;int age;public Person(){}public Person(String name,int age){ = name;this.age = age;}//不是抽象⽅法:// public void eat(){//// }//抽象⽅法public abstract void eat();public void walk(){System.out.println("⼈⾛路");}}class Student extends Person{public Student(String name,int age){super(name,age);}public Student(){}public void eat(){System.out.println("学⽣多吃有营养的⾷物");}@Overridepublic void breath() {System.out.println("学⽣应该呼吸新鲜的没有雾霾的空⽓");}}。
java基础之抽象类和抽象方法
java基础之抽象类和抽象⽅法Java 抽象类在⾯向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是⽤来描绘对象的,如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。
抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员⽅法和构造⽅法的访问⽅式和普通类⼀样。
由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使⽤。
也是因为这个原因,通常在设计阶段决定要不要设计抽象类。
⽗类包含了⼦类集合的常见的⽅法,但是由于⽗类本⾝是抽象的,所以不能使⽤这些⽅法。
在 Java 中抽象类表⽰的是⼀种继承关系,⼀个类只能继承⼀个抽象类,⽽⼀个类却可以实现多个接⼝。
抽象类在 Java 语⾔中使⽤ abstract class 来定义抽象类。
如下实例:/* ⽂件名 : Employee.java */public abstract class Employee{private String name;private String address;private int number;public Employee(String name, String address, int number){System.out.println("Constructing an Employee"); = name;this.address = address;this.number = number;}public double computePay(){System.out.println("Inside Employee computePay");return 0.0;}public void mailCheck(){System.out.println("Mailing a check to " + + " " + this.address);}public String toString(){return name + " " + address + " " + number;}public String getName(){return name;}public String getAddress(){return address;}public void setAddress(String newAddress){address = newAddress;}public int getNumber(){return number;}}注意到该 Employee 类没有什么不同,尽管该类是抽象类,但是它仍然有 3 个成员变量,7 个成员⽅法和 1 个构造⽅法。
java抽象类和抽象方法
java抽象类和抽象⽅法⾸先应该明确⼀点的是,抽象⽅法必须定义在抽象类中。
先看⼀个抽象类的定义:public abstract class Animal {public abstract void eat();public abstract void sleep();public void Smile(){System.out.println("每个动物都会微笑,因为最美!");}}抽象类作为⼀个⽗类,可以定义抽象⽅法,也可以定义⼀般⽅法。
我们在来定义⼀个⼦类:public class Man extends Animal{public void eat(){System.out.println("⼀天天就知道个吃");}public void sleep(){System.out.println("就知道个睡");}public static void main(String[] args){Man obj=new Man();obj.eat();obj.sleep();obj.Smile();}}⼦类Man继承了抽象类,那么就必须将其抽象⽅法实现,是必须,必须,不然就会报错。
抽象类和接⼝的区别:⼦类继承了抽象类,抽象⽅法必须实现,然⽽其他其他⽅法可以不实现,抽象⽅法中也可以定义不是抽象的⽅法⼦类实现接⼝,接⼝中默认的⽅法都为抽象⽅法,也就不能实现,⼀个⼦类可以实现多个接⼝,⽽只能继承⼀个抽象类,其实接⼝是抽象类中更为具体的⼀种类⽽⾔。
public interface TrafficTool {void Car();void Airport();void Train();}public class LandTool implements TrafficTool {public void Car(){System.out.println("⾛,咋们炸汽车去");}public void Airport(){System.out.println("⾛,咋们炸飞机去");}public void Train(){System.out.println("抢⽕车去不去,愣货");}public static void main(String[] args){LandTool obj=new LandTool();obj.Car();obj.Airport();obj.Train();}}补充接⼝,接⼝不允许任何⽅法定义,接⼝和实现完美分离。
JAVA抽象类和抽象方法(abstract)
JAVA抽象类和抽象⽅法(abstract)⼀、抽象(abstract)的使⽤ 当⽗类的某些⽅法不确定时,可以⽤abstract关键字来修饰该⽅法[抽象⽅法],⽤abstract来修饰该类[抽象类]。
我们都知道,⽗类是将⼦类所共同拥有的属性和⽅法进⾏抽取,这些属性和⽅法中,有的是已经明确实现了的,有的还⽆法确定,那么我们就可以将其定义成抽象,在后⽇⼦类进⾏重⽤,进⾏具体化。
这样,抽象类也就诞⽣了。
1. 语法格式abstract 类名{ }public abstract class Animal {} 例如,定义了“动物”⽗类,其中“动物名称”和“动物年龄”属性已经明确了,但是“动物叫”的⽅法没有明确,此时就可以将“动物叫”定义为抽象⽅法。
所以,抽象类是为了把相同的但不确定的东西的提取出来,为了以后的重⽤。
定义成抽象类的⽬的,就是为了在⼦类中实现抽象类。
package javastudy;public class AbstractDemo1 {public static void main(String[] args) {// TODO Auto-generated method stub}}// 这就是⼀个抽象类abstract class Animal {String name;int age;// 动物会叫public abstract void cry(); // 不确定动物怎么叫的。
定义成抽象⽅法,来解决⽗类⽅法的不确定性。
抽象⽅法在⽗类中不能实现,所以没有函数体。
但在后续在继承时,要具体实现此⽅法。
}// 抽象类可以被继承// 当继承的⽗类是抽象类时,需要将抽象类中的所有抽象⽅法全部实现。
class cat extends Animal {// 实现⽗类的cry抽象⽅法public void cry() {System.out.println("猫叫:");}}⼆、⽤abstract修饰的类,即抽象类;⽤abstract修饰的⽅法,即抽象⽅法。
java抽象类和抽象方法
java抽象类和抽象⽅法⼀、抽象⽅法和抽象类的概念和使⽤在之前的课程中学习了⽅法的覆写(⼦类覆写⽗类的⽅法),也就是⼦类可以重写⽗类的⽅法,但是这是可选的(你可以覆写也可以不覆写在语法上都不会出现问题的),如果有⼀个需求:要求⽗类的某个⽅法必须被⼦类覆写,那么就需要将⽗类的这个⽅法定义为抽象⽅法(强制要求被覆写),如果⼀个类中出现了抽象⽅法那么这个类必须定义为抽象类,抽象类和抽象⽅法的定义语法:●定义抽象类: public abstract class 类名{};●定义抽象⽅法: public abstract 返回值类型⽅法名();[抽象⽅法没有⽅法体]DEMO:定义⼀个抽象类以上定义了⼀个抽象类,可以使⽤该抽象类实例化⼀个对象吗?DEMO:使⽤抽象类实例化对象发现了不能使⽤抽象类的构造⽅法实例化对象,如果不能实例化对象那么抽象类中的所有操作(属性和⽅法)都没有任何意义,因为不能访问啊,此时可以通过⼦类来继承抽象类中的操作,让⼦类对象去调⽤。
DEMO:定义抽象类的⼦类.此时定,义了抽象类的⼦类,但是要求⼦类必须覆写⽗类的所有抽象⽅法。
使⽤将⽗类的⽅法定义为抽象⽅法的⽅式来实现强制要求覆写某个⽅法的⽬的。
但是有⼀种情况可以不要求⼦类覆写⽗类的所有抽象⽅法,如果⼦类也是⼀个抽象类的时候可以不覆写⽗类的抽象⽅法。
DEMO:⼦类是抽象类此时可以选择性覆写⽗类的抽象⽅法。
总结:1、定义抽象类和抽象⽅法使⽤的关键字是“abstract"2、抽象类被叫做⼀个不完整的类因为它有⾃⼰的构造⽅法,但是却不能直接实例化对象,他的抽象⽅法没有⽅法体。
3、如果⼦类不是⼀个抽象类那么必须覆写⽗类的所有抽象⽅法⾯试题:1、抽象类中可以没有抽象⽅法吗?答:可以的2、如抽象类没有抽象⽅法,那么可以直接实例化对象吗?答:不可以,因为没有抽象⽅法它依然是-⼀个抽象类3、抽象类的⽅法必须被⼦类覆写吗?答:不⼀定,如果⼦类是⼀个普通类则必须全部覆写,如果⼦类是⼀个抽象类则不强制要求全部覆写⽗类的抽象⽅法。
Java:抽象类、抽象方法
Java:抽象类、抽象⽅法1、 abstract修饰符可以⽤来修饰类也可以修饰⽅法,如果修饰类,就是抽象类;如果修饰⽅法,就是抽象⽅法。
2、抽象类中可以没有抽象⽅法,抽象⽅法的类⼀定要声明为抽象类。
3、抽象类,不能使⽤new关键字来创建对象,它是⽤来让⼦类继承的。
4、抽象⽅法,只有⽅法的声明,没有⽅法的实现,它是⽤来让⼦类实现的。
5、⼦类继承抽象类,那么就必须实现抽象类没有实现的抽象⽅法,否则该⼦类也要声明为抽象类。
1package com.jiemyx.oop.demo12;23//abstract的作⽤:约束,有⼈帮我们实现,⼀个有些规则的框架,具体的情况需要⼦类来实现45//abstract 抽象类6public abstract class Person {78//abstract 抽象⽅法,只有⽅法名,没有⽅法的实现。
有抽象⽅法,它的类必须是抽象类9public abstract void run();1011public abstract void sleep();1213//抽象类中可以存在不是抽象的⽅法14public void eat(){1516 }1718 }1920//1、抽象类不能new关键字去创建对象,只能靠⼦类去实现它,约束!21//2、抽象类可以写普通的⽅法22//3、抽象⽅法必须在抽象类中2324//抽象的抽象:本⾝类就是抽象的(不具体的),然后在这个类上再抽象⼀次。
2526//抽象类的存在意义:提⾼开发效率2728//抽象类中存在构造⽅法(构造器)1package com.jiemyx.oop.demo12;23//extends:单继承,接⼝可以实现多继承45//抽象类的所以抽象⽅法,继承了它的⼦类,都必须实现它的抽象⽅法,否则会报错6//除⾮,⼦类也是抽象⽅法 public abstract class A extends Person{}7public class A extends Person{8 @Override9public void run() {1011 }1213 @Override14public void sleep() {1516 }17 }1package com.jiemyx.oop.demo12;23public class Application {4public static void main(String[] args) {5//Person person = new Person(); //抽象类不可以new关键字创建对象67//⼦类来实现8 A a = new A();9 a.run();10 a.sleep();11 a.eat();12 }13 }抽象类不可以创建对象抽象类有构造⽅法(构造器)使⽤IDEA软件,添加out⽬录,来查看class⽂件,是否有构造⽅法。
java中抽象类与抽象方法的使用问题
从面向对象设计的角度来说,抽象类与抽象方法,接口都是必不可少的内容,正是这些概念以及实际运用,够成了java面向对象的核心与强大,抽象类,方法是和多态密不可分的设计范式....何为多态?简单的说就是一类事物的多种形态,基本类型有多种形态(类型自动转换),方法有多种形态(重载:同名不同参),引用类型的多态则相对复杂,比如说,一个描述人类的类,里面有个方法叫说话,不同语言的人说出来是不一样的,中国人说汉语,外国人说我听不懂的鸟语...在人类这个类中怎么实现说话呢?可想而知是不现实的,最好的方法就是把这个说话的方法设计成抽象方法,不提供具体实现,让继承人类的子类去重写(重写:同名,同参,同返回,范围不能变小,异常不能变大)这个方法...何为抽象类?抽象类是从其他若干个具有相同属性与行为的类中进一步抽象出来的类,可以设计方法,属性,如果把类设计为抽象类,那么这个类是不能被实例化的,只能被继承的子类(子类也可以为抽象类,也可以不是)间接使用,抽象类有构造,是一个完整的类,抽象类中可以包含抽象方法,也可以不含,那么问题来了,既然把类设计成抽象,肯定是用于设计多态用的,一般都会包含抽象方法:子类继承了抽象类,如果抽象类中含有抽象方法,那么子类也继承了抽象方法,包含抽象方法的类必须是抽象类,不然子类就必须重写抽象方法,就是提供具体实现,完成多态,下面3条原则保证了抽象方法必须重写:1、必须用public abstract修饰抽象方法,private ,static 都不能用于修饰2、包含抽象方法的类必须是抽象类3、抽象类可以不含抽象方法代码示例:[java]view plaincopy1.<span style="font-size:18px;">package OOTest;2.public abstract class Human {//抽象父类3. private final int time=++count;//对象计数器4. private static int count;//静态池5. //属性封装6. private String name;//封装三步:隐藏属性,提供getter与setter方法,构造中调用setter初始化7. private int age;8. private String sex;9.10. //getter&&setter11. public String getName(){12. return ;13. }14. public void setName(String name){15. //处理代码:姓名不能为空,且不能包含数字16. if(name.length()==0){17. System.out.println("姓名不能为空");18. }19. else if(this.isWrongName(name)){//调用私有方法处理20. System.out.println("非法姓名,不能包含数字");21. }22. else{23. =name;24. }25. }26. private boolean isWrongName(String name){//判断非法姓名输入(私有)27. char[] ch=name.toCharArray();28. for(int i=0;i<ch.length;i++){29. try{30. int s=Integer.parseInt(String.valueOf(ch[i]));31. s++;//废32. return true;33. }34. catch(Exception e){35. continue;//出错就继续下一次循环转换36. }37. }38. return false;//先返回错误39. }40. public int getAge(){41. return this.age;42. }43. public void setAge(int age){44. if(age<=0){45. System.out.println("年龄有误");46. }47. else{48. this.age=age;49. }50. }51. public String getSex(){52. return this.sex;53. }54. public void setSex(String sex){55. if(sex.length()>1||sex.length()==0){56. System.out.println("性别设定错误");57. }58. else if(sex.toCharArray()[0]=='男'||sex.toCharArray()[0]=='女'){59. this.sex=sex;60. }61. else{62. System.out.println("性别设定错误");63. }65.66. //构造67. public Human(){//无参68. this("无1名氏",25,"男");69. }70. public Human(String name,int age,String sex){//全参71. this.setName(name);72. this.setAge(age);73. this.setSex(sex);74. }75.76. //抽象方法77. public abstract void speak();//说话78. public abstract void work();//工作79. public abstract void eat();80.81. //获取对象创建数目82. public int getHumanClassUseTimes(){83. return this.time;84. }85.}86.</span>子类:[java]view plaincopy1.<span style="font-size:18px;">package OOTest;2.3.public class Chinese extends Human {4.5. public Chinese() {6. // TODO Auto-generated constructor stub7. }8.9. public Chinese(String name, int age, String sex) {10. super(name, age, sex);11. // TODO Auto-generated constructor stub12. }13.14. public void eat() {15. System.out.println(this.getName()+"中国人用筷子吃饭");17.18. public void speak() {19. System.out.println("中国人说汉语"+this.getSex());20. }21.22. public void work() {23. System.out.println("中国人干活踏实勤快"+this.getAge());24. }25.26.}27.</span>测试类:[java]view plaincopy1.<span style="font-size:18px;">package OOTest;2.3.public class Test {4. public static void main(String[] args) {5. Human h=new Chinese();6. h.eat();7. h.speak();8. h.work();9. System.out.println("Human类被实例化:"+h.getHumanClassUseTimes()+"次");10. Human h1=new Chinese();11. System.out.println("Human类被实例化:"+h1.getHumanClassUseTimes()+"次");12. }13.}</span>运行结果:非法姓名,不能包含数字null中国人用筷子吃饭中国人说汉语男中国人干活踏实勤快25 Human类被实例化:1次非法姓名,不能包含数字Human类被实例化:2次。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验抽象方法和抽象类
实验目的:掌握抽象方法和抽象类的概念及使用方法
实验步骤:
1.编写Test.java程序,编译时会出现错误,说明该类中有没有方法体的方法要申明为抽象
方法。
代码如下:
2.修改以上程序,为没有方法体的方法加上abstract 修饰符,重新编译,会发现还是出错,
说明有抽象方法的类应该也要被申明为抽象类,代码如下:
3.修改以上程序,增加abstract类修饰符,重新编译,通过。
4.修改以上程序,为Test3这个抽象类增加一个子类,但在子类中不重写来实现父类中的
抽象方法。
编译会发现有错误,说明子类在继续抽象父类后,如果没有将父类中的所有抽象方法完全实现(重写)的话,则该子类也要被申明为抽象方法。
代码如下:
5.修改以上程序,为SubTest类增加abstract修饰符,编译通过。
代码如下:
6.修改以上程序,增加main方法,并实例化SubTest类的实例,编译,会发现出错,说明抽
象类是不能被实例化。
代码如下:
6.修改程序,在子类SubTest类中将父类Test3中的所有抽象方法重写并实现,并去掉子
类的abstract修饰符,然后编译,通过。
说明当子类将父类的所有抽象方法实现后,则该子类成为一个一般的类,也可以进行实例化了。
运行Integration类,查看运行结果。
代码如下:
额外实验:
利用抽象方法和抽象类来实验多形状的求面积和周长。