java第5章 接口与多态
- 格式:ppt
- 大小:516.00 KB
- 文档页数:92
一、访问控制符(1)类的访问权限:①公共访问权限(public)。
②包访问权限。
(2)成员的访问权限①public②private③protected④默认包访问★结论:public 包访问protected p 相同包中的非子类中被访问YES YES YES相同包中的子类中被访问YES YES YES不同包中的非子类中被访问YES NO NO不同包中的子类中被访问YES NO NO二、继承(一)Java中继承的实现①extends关键字例题:class Person {String name;int age;void walk(){System.out.println("会走路");}}class Student extends Person{String no;void takeLessons(){System.out.println("我喜欢所有的课程");}}(二)构造方法在继承中的作用①若子类没有定义构造方法,创建对象时将无条件的调用父类的无参构造方法。
②对于父类的有参构造方法,子类可以在自己的构造方法中使用关键字super来调用它,但super语句必须是子类构造方法的第一条语句。
③子类在自己的构造方法中如果没有使用super明确调用父类的构造方法,则在创建对象时,将自动先执行父类的无参构造方法,然后再执行自己定义的构造方法。
例题:class Parent{String my;public Parent(String x){my=x;}}public class SubClass extendsParent{public static voidmain(String[] args){}}(三)子类的继承性①子类和父类在同一包中的继承性:例题:②子类和父类不在同一个包中的继承性:例题:★结论:public 包访问protected p 可被相同包中的子类继承后直接访问YES YES YES可被不同包中的子类继承后直接访问YES NO YES(四)变量的继承和隐藏例题:class Parent{int a=3;int m=2;}public class SubClass extends Parent{int a=4;int b=1;public static voidmain(String[] args){SubClass my=new SubClass();System.out.println("a="+my.a+",b="+my.b+",m="+my.m);}}三、多态性①方法的重载例题:public classA{int x=0;void test(int x){System.out.println("test(int):"+x);}void test(long x){System.out.println("test(long):"+x);}void test(double x){System.out.println("test(double):"+x);}public static void main(String[] args){Aa1=new A();a1.test(5.0);a1.test(5);}}★方法的覆盖例题:class A{int x=0;voidtest(int x){System.out.println("inA.test(int):"+x);}voidtest(long x){System.out.println("inA.test(long):"+x);}voidtest(double x){System.out.println("inA.test(double):"+x);}}public class B extends A{voidtest(int x){System.out.println("inB.test(int)"+x);}voidtest(String x,int y){System.out.println("inB.test(String,int):"+x+","+y);}publicstatic void main(String[] args){B b1=new B();b1.test("abcd",10);b1.test(5);b1.test(5.0);}}②运行时刻多态例题:class Animal{voidcry(){}}class Cat extends Animal{voidcry(){System.out.println("喵喵...");}}class Dog extends Animal{voidcry(){System.out.println("汪汪...");}}public class TestCry{publicstatic void main(String[] args){Animal a=new Cat();a.cry();a=new Dog();a.cry();}}四、this和super(一)关键字this关键字this表示“当前对象”。
Java高级编程:多态、继承和接口设计的深入理解
在 Java 编程中,多态、继承和接口是三个十分重要的概念。
它们是 Java 面向对象编程的核心概念,在进行大型软件设计时,设计良好的多态、继承和接口设计能够大大提升软件的可维护性、可扩展性和可重用性。
本文将逐一探讨这三个核心概念,并深入理解它们的设计思想与实现方法。
一、多态
多态是指一个变量、对象或方法能够具有多重形态的能力。
这意味着同一类对象可以通过不同的方式处理,主要是通过运行时实现。
在 Java 编程中,多态最常见的应用是基于继承和接口设计。
1. 基于继承的多态实现
在基于继承的多态实现中,子类可以复写父类的方法,实现方法的多态性。
Java 的动态绑定机制能够根据实际调用的方法进行方法调用,实现多态性。
下面是一段基于继承的多态实现代码:
```
public class Animal {
public void move() { System.out.println(\。
第6章接口与多态6.1 接口 Java中的接口就是定义了若干个抽象方法和常量,形成一个属性集合,该属性集合通常对应某一组功能,可以实现类似于类的多重继承功能。
其格式为:6.11接口的声明与使用1.接口声明[public] interface 接口名[extends 父接口名列表]{ //接口体 //常量声明//抽象方法声明}2.接口体 接口体中包含常量的声明和方法定义两部分。
接口声明时的注意事项1.在Java中接口是一种专门的类型,用interface关键字定义接口。
2.接口中只能定义抽象方法,而且访问权限一定是公有的,在定义时可省略public和abstract修饰符。
3.接口中可以定义变量,但实际上是publicfinal修饰的常量。
4.接口中不能定义静态方法。
3.接口的使用•在Java 语言中,接口由类去实现以便使用接口中的方法,一个类可以实现多个接口,类通过使用关键字implements 声明自己实现一个或多个接口。
如果实现多个接口,则用逗号隔开接口名。
•如果一个类实现了某个接口,那么这个类必须重写该接口的所有方法。
需要注意的是,重写接口的方法时,接口中的方法一定是public abstract 方法,所以类在重写接口方法 时不仅要去掉abstract 修饰、给出方法体,而且方法访问权限一定要显式地用显式地用public public public来修饰来修饰。
•类重写的接口方法以及接口中的常量可以被类的对象调用,而且常量也可以用类名或接口名直接调用。
•接口声明时,如果关键字interface前加下public,就称这样的接口是一个public接口。
public接口可以被任何一个类实现。
如果一个接口不加public修饰,就是友好接口,只能被同一包中的类实现。
•如果实现了某个接口,那么子类也就自然实现了该接口,子类不必于地使用关键字implements声明实现这个接口。
•如果一个类声明实现一个接口,但没有重写串的所有方法,那么这个类必须是abstract类。
java接⼝和多态接⼝概念接⼝是功能的集合,同样可看做是⼀种数据类型,是⽐抽象类更为抽象的”类”。
接⼝只描述所应该具备的⽅法,并没有具体实现,具体的实现由接⼝的实现类(相当于接⼝的⼦类)来完成。
这样将功能的定义与实现分离,优化了程序设计。
请记住:⼀切事物均有功能,即⼀切事物均有接⼝。
接⼝定义时需要使⽤interface关键字。
接⼝中成员的特点1、接⼝中可以定义变量,但是变量必须有固定的修饰符修饰,public static final 所以接⼝中的变量也称之为常量,其值不能改变。
后⾯我们会讲解static与final关键字2、接⼝中可以定义⽅法,⽅法也有固定的修饰符,public abstract3、接⼝不可以创建对象。
4、⼦类必须覆盖掉接⼝中所有的抽象⽅法后,⼦类才可以实例化。
否则⼦类是⼀个抽象类。
interface Demo { ///定义⼀个名称为Demo的接⼝。
public static final int NUM = 3;// NUM的值不能改变public abstract void show1();public abstract void show2();}//定义⼦类去覆盖接⼝中的⽅法。
类与接⼝之间的关系是实现。
通过关键字 implementsclass DemoImpl implements Demo { //⼦类实现Demo接⼝。
//重写接⼝中的⽅法。
public void show1(){}public void show2(){}}接⼝的多继承多个接⼝之间可以使⽤extends进⾏继承。
class Fu {public void show(){}}interface Inter {pulbic abstract void show1();}class Zi extends Fu implements Inter {public void show1() {}}interface Fu1{void show();}interface Fu2{void show1();}interface Fu3{void show2();}interface Zi extends Fu1,Fu2,Fu3{void show3();}接⼝的思想优点:1、接⼝的出现扩展了功能。
实验五接口、多态与内部类实验目标:1、理解接口、塑型、多态的概念并能熟练应用;2、熟练掌握接口的定义和使用;3、深刻理解构造方法的调用顺序,理解编写时需要注意的问题;4、了解并学会使用内部类实验任务:1、继承时的多态:目测给出下面代码的执行输出结果,并简单解释每一行输出的原因。
答:首先,该程序的主函数是Vehicle v=new Vehicle();即先声明并实例化一个汽车对象,而v.test();则是调用汽车的测试方法;而test方法里,Vehicle vc=new Car();是将上面的汽车指向了一个具体的小汽车对象;Bus vb=new Bus();将公共汽车指向了一个具体的公共汽车对象;drive();调用汽车的驾驶方法;vc.drive();调用小汽车的驾驶方法;vb.drive();调用公共汽车的驾驶方法;而vc.brake();vb.brake();则是直接调用汽车的刹车方法。
因而运行结果如下:A new bus.Vehicle is drivenCar is drivenBus is drivenVehicle is brakedVehicle is braked2.针对下面的简单的类图,从面向对象的角度,将Instrument定义成接口,应怎样实现。
编写能完成如图功能的程序,并再编写一个简单的应用程序进行多态性测试。
(参考例子5-9;实验4该题是要求用抽象类来实现,在此要求用接口实现,还要进行多态性测试)说明:Instrument表示乐器、Wind表示管乐器、Percussion敲击乐器、Stringed表示弦乐器、Woodwind表示木管乐器、Brass表示铜管乐器。
要求:(1)Instrument为接口,Wind为抽象类,其他为普通类。
这里测试的目的是:我们知道当一个普通类实现一个接口时,必须实现该接口的全部方法,但当这个类是抽象类时,我们还需要实现该接口全部方法吗?如果不需要实现?那么是否直接不理这个方法就一,还是要将这个方法在自己类内部再标记一次为抽象方法。