java 多态 接口_Java继承、多态和接口

继承

含义:可以通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类

优点:

1)代码的重用性

2)子类扩展父类的属性和方法

3)父类的属性和方法可用于子类

4)设计应用程序变得更加简单

继承的实现:

关键字extends:用于继承其他类(extends出现在类声明类名后,extends后接要继承的类名)

访问修饰符   class  子类名   extends 父类名(){};

1 public class Employee (){} //父类

2 public class Salary extends Employee (){} //子类

单继承与多继承、Object类:

在Java中一个类只能有一个父类,多继承在Java中是不被允许的,但并不意味一个类没有祖父等往上的类。Object类是所有类的祖类,任何类都可以可以继承Object类(不是直接父类就是间接父类)

1 public class Employee (){} //父类

2 public class Salary extends Employee (){} //子类

3 public class Emp extends Salary (){} //子类

方法重写(子类对父类方法的重写):子类可以重写父类继承的方法,从而允许子类添加或者改变父类中方法的行为

>子类的方法返回值的类型、方法名、和形式参数列表必须和父类一致

>子类访问修饰符不能比父类严格

>子类抛出的异常不能多于父类

super关键字:调用父类中重写的方法

调用父类构造器:

>调父类构造器是第一句可执行语句

>默认情况下子类会调用父类的无参构造

>做子类构造器初始化要先做父类构造器初始化

格式: super.方法名()

final关键字

1)修饰类:不能被继承

2)修饰方法:最终方法不能被重写

3)修饰变量:变量值不能被修改

类的高级概念

静态成员:

关键字static 允许成员变量和方法不于类的特定实例关联,通过关键字static 声明的成员变量和方法可以被认为是全局的,任何其他类可以直接访问静态成员和调用静态方法,而不需要该类的一个实例

实例初始化块

在类的对象每次实例化时执行一次,在构造器之前执行

执行顺序:1)子类中相应的构造器被调用

2)执行对super的调用,控制流程跳转回子类构造器

3)父类构造器执行完,控制流程跳转回子类构造器

4)在该子类构造器中的super()后面的任何语句执行前,实例化初始化块执行

5)执行子类构造器中super()后面的语句

内部类:

静态内部类:

classOuter{

static classInner{

}

}

成员内部类:

classOuter{

classInner{

}

}

局部内部类:

48304ba5e6f9fe08f3fa1abda7d326ab.png

voidf(){

classInner{

voidg(){

}

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

匿名内部类:

1 public classOutter {2

3 public voidprint(Inter inter){4 inter.printfInterface();5 }6 }7

8 interfaceInter{9 voidprintfInterface();10 }11 public classTest {12

13 outter.print(newInter(){14 @Override15 public voidprintfInterface() {16 System.out.println("匿名内部类打印");17 }18 });19 }20 }

多态和抽象

多态:不同情形下的多种状态

分类:

>静态多态(方法重载)

>动态多态(在运行中系统才能确定方法所指对象)

步骤:1)编写父类派生子类

2)子类当中重写父类方法

3)使用多态(用父类数据类型引用子类对象)

4)调用子类重写方法实现

instanceof关键字:用于判断运行时对象的真正类型

抽象

abstract关键字: 放于class之前(抽象类),不能实例化父类对象,需要被继承后才能实现

抽象方法:只有方法签名,没有方法主体,类也必须声明为抽象类,任何子类必须重写抽象方法,除非子类本身也是抽象

public abstract classPet {private String name; //名字

publicPet() {}publicPet(String name) {super();this.name =name;

}publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}

@OverridepublicString toString() {return "Pet [name=" + name + "]";

}public abstractshow();

}

接口:不能被实例化,不包含任何构造器,所有方法都是抽象的,不能包含实例成员变量,不能被一个类继承,只能被一个类实现,能够继承多个接口

接口声明

关键字:interface

public interface Board {

public String Manufacturer(); //生产商

}

接口性质:

>接口默认是抽象的

>接口中的每一个方法默认也是抽象的

>默认访问级别是public

接口实现

关键字:implements

1 public class Nboard implementsBoard {2 private String Manufacturer; //生产商

3

4 publicNboard(String manufacturer) {5 super();6 this.Manufacturer =manufacturer;7 }8

9 publicNboard() {10 super();11

12 }13

14 publicString Manufacturer() {15

16 returnManufacturer;17 }18

19 }

接口与接口之间可以多重继承,只能继承一个父类

使用接口原则:1)使用接口解决多继承

2)为外部类添加功能

3)以面向对象角度考虑,将一个类与自身的特征和行为依赖于外部的可选的特征和行为分离,让类尽可能单纯

接口优点:将设计和实现相分离,对外(调用者)隐藏实现(而通常调用者也不需要关心实现);面向接口编程是oop的核心

接口继承

public class Nboard extends Pet implements Board {}

多重继承

public interface HockeyListener extendsSportsListener{//实现接口中的所有方法

}public class SportsListener implementsHockeyListener {//也需实现六个方法

}public interfasce HockeyListener extendsSportListener,EventListener{//需要实现三个接口中的方法

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值