-->继承
1.继承的定义
--继承是一种由已有类创建新类的机制。在Java中,被继承的类称为基类或者父类,由继承形成的类称为派生类或者子类。
2.继承的特点
1.只支持单继承,即一个子类只允许有一个父类。
2. 子类可以拥有父类的属性和方法
3. 子类可以拥有自己的属性和方法
4. 子类可以重写覆盖父类的方法
5. 可以声明父类,创建子类(又称父类装载子类)
3.继承的应用
--Java中,一个类只能有一个父类,即类的单继承,使用extends关键字,这个类,称为派生类或子类。代码如下:
[修饰符] class 类名 [extends 父类] {
//派生类继承基类中非private的成员!!!
//派生类还可以实现变量的隐藏;
//派生类还可以实现方法重写。
}
-对象的上转型
--定义:父类声明的对象,由其子类的构造方法构建。
代码如下:
public class Phone {
private String number;
public Phone() {
super();
//TODO Auto-generated constructor stub
}
public String getnumber() {
return number;
}
public void SetNumber(String number) {
this.number = number;
}
public void callup(String num) {
System.out.println("calling the"+num);
}
phones[1].setNumber("13546758769");
phones[2].setNumber("13546756369");
phones[0].setNumber("13546327659");
for (int i=0;i<phones.lenth;i++){
phones[i].callup("10086");
phones[i].acceptCall();
}
}
}
-特点
1.对象的上转型,不能再调用子类特有的成员。
2.对象的上转型,只能调用子类重写的方法。
3.对象的上转型,实现了多态性!
-->抽象类
1.抽象的定义
--抽象是由abstract修饰的类,就是抽象类。抽象类只用于继承,不能用于创建对象。
2.抽象的特点
--抽象类中可以有成员变量、构造方法、实例方法,与普通类一致;
抽象类中还可以有抽象方法。
3.抽象的应用
--抽象类的派生类,必须重写所有的抽象方法!
ps:什么是抽象类方法
--方法:由abstract修饰的方法,就是抽象方法
--特点:抽象方法只能声明,不能实现
--应用:含有抽象方法的类,必须是抽象类;抽象类的子类,必须重写抽象方法。
>代码如下:
public abstract class AbstractClass {
private int x=100;
public void show()
{
System.out.println("抽象类中可以有成员变量:"this.x);
}
public abstrac void say(); //抽象方法只能声明不能实现
}
public class SubClass extends AbstractClass {
public void say(){
System.out.println("抽象类的子类必须重写抽象方法");
}
}
4.抽象类的位置
--1.用来规划子类都应该有哪些成员;
--2.在Java体系中,抽象类一般都是最高的基类。例如IO流
5.抽象类的应用
>代码如下:
public abstract class Shapes {
/**
*定义抽象类Shapes图形类,包含抽象方法getArea()、getPerimeter();
**/
public abstract double getArea(); //获取面积
public abstract double getPerimeter(); //获取周长
}
public class Circle extends Shapes {
double r;
public Circle(double r) {
this.r = r;
}
public double getArea() {
return r*r*Math.PI;
}
public double getPerimeter() {
return 2*Math.PI *r;
}
}
-->接口
1.接口的定义
--由于Java中并不允许多置继承,但Java提供了接口(interface)来解决这类问题。
接口是用来实现类似多置继承功能的一种结构,它在语法上和类很相似,也有成员变量和方法,接口间也可以形成继承关系,但接口和类有着很大的区别,它的成员变量都是常量,方法都是抽象方法,没有方法体。
>代码如下:
[修饰符] <interface> <接口名> [extends 父接口列表]
{
[public] [static] [finall] 类型 变量名=初始值; //静态常量
[public] [abstract] 返回值 方法名 ([参数列表]); //抽象方法
}
2.接口的特点
1.接口用关键字interface来定义,而不是class。
2.接口中定义的变量全部公有的、静态的、最终的,所以都是常量。
3.接口中定义的方法都是抽象、公有的、所以修饰符可以省略。
4.接口中没有构造方法,而且定义的方法都是抽象方法,所以接口不能创建对象。
5.接口采用多重继承机制,而不是采用类的单重继承机制。
3.接口的应用
--一个类要实现某个或某几个接口的使用implements关键字。
一个类可以同时实现多个接口,各接口间用“,”隔开。这个类,称为接口的实现类。
>代码如下:
[修饰符] class 类名 [extends 父类] implements 接口1,接口2,接口3 {
//类体一定要重写接口中的所有方法!!!
}
应用:
使用了接口实现类,必须重写接口中所有的方法!!!
接口回调:
接口声明的对象,由其实现类的构造方法构建。
>如下代码:
public interface Jumpping {
public abstract void jump(); //相当于void jump;
}
public class Cat implements Jumpping {
@Override
public void jump() {
System.out.println("猫可以跳高了");
}
}
public class Dog implements Jumpping {
@Override
public void jump() {
System.out.println("狗狗跑得快,跳的不高");
}
}
//测试类,或接口类
public calss JumppingDemo {
public static void main(String[] args) {
// Jumpping j = new Jumpping(); //错误,接口不能实例化
Jumpping j1=new Cat(); //接口回调!!实现的是多态性
Jumpping j2=new Dog();
j1.jump();
j2.jump();
}
}
4.接口和抽象类的区别
1.接口中的所有方法都是抽象的,而抽象类可以有抽象方法,也可以有实例方法。
2.一个类可以实现多个接口,但只能继承一个父类,接口可以继承多接口。
3.接口与实现它的类不构成继承体系,即接口不是类体系的一部分。因此,不相关的类也可以实现相同的接口,而抽象类是属于类的继承体系,并且一般位于类体系的顶层。
-->内部类
1.内部类的定义
--将一个类定义在另一个类的内部,即为内部类,另一个即为外部类。
2.内部类的特点
1.内部类创建对象的方式不一样;
2.内部类生成的字节码不一样。
3.内部类的功能
实现类的多重继承:
实例如下:
public class OuterClass {
int x=100;
class InnerClass{
int x=55;
public void display(){
System.out.println("内部类的方法,x="+x);
}
}
public void display() {
System.out.println("内部类的方法,x="+x);
}
}
class Demo {
public static void main(String[] args) {
OuterClass ob1=new OuterClass();
ob1.display();
OuterClass.InnerClass ob2=new OuterClass().new InnerClass();
ob2.display();
}
}
--生成的字节码文件如下:
Demo.class
OuterClass$InnerClass.class
OuterClass.class