java 多态与接口_JAVA继承、多态与接口

本文详细介绍了Java中的继承概念,包括继承的优点、单继承与多继承、构造方法、super关键字、final与抽象的使用。同时阐述了多态的概念,如向上转型、动态多态的实现步骤以及类型转换instanceof的运用。最后,讨论了接口的重要性,接口与抽象类的区别,以及静态成员变量和内部类的相关知识。
摘要由CSDN通过智能技术生成

一、继承

1、继承的优点

代码的重用性

子类可以扩展父类的属性和方法

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

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

2、如何判断类具有继承关系

类和类的关系

1)has-a(组合)

2)is-a(继承)

3、单继承和多继承

单根性:

在java中,一个类只能有一个父类

传递性:

子类可以将父类的属性和方法传递给自己的子类

4、所有类的根类都是Object(超类,基类)

5、方法重写(以后多态的使用要用到)@Override//注解

1)子类的方法的返回值类型、方法名和形式参数列表,

必须和父类中的是相同的

2)子类的方法的访问修饰符不能比父类更严格

3)子类中重写的异常不能抛出比父类更多的异常

6、构造方法与继承

不像一个超类的成员

super加括号调用父类的构造器,也必须是语句块的第一句

注意:默认情况下,子类的构造器会调用父类的无参构造器,

当父类没有无参构造方法,而子类有无参构造方法时,

需要指明调用的是什么构造方法。

7、super关键字

super.***和super(***);

8、final关键字

使用final修饰一个类,这个类不能再被继承

使用final修饰一个方法,这个方法不能再被重写

9、抽象abstract

在编写类时,通常会在类中定义一些方法,用来描述该类所具有的行为。

在类的方法中,我们编写代码

注意:抽象类是不能被实例化的。

同时抽象类和final不能同时出现,因为抽象类时需要被继承的

抽象方法是没有方法主体的,

抽象方法出现在抽象类中,

抽象方法在子类中必须写出实体,即方法重写,除非子类也是抽象类

意义:

当我们的类或方法没有具体的业务意义的时候,需要用到抽象。

补充:

public、protected修饰的方法和成员可以被子类继承;

而default看是否在同一个包中,在同一个包中可以被子类继承;

private不可以被继承到。

二、多态

多态

1、使用父类的类型引用子类的实例

/*用数组保存5辆汽车:3轿车2客车*/

MotoVehicle[] vehicles = new Motovehicle[5];

vehicles [0] = new Car("1","宝马","宝马550i");

vehicles [1] = new Car("2","宝马","宝马550i");

vehicles [2] = new Car("3","宝马","宝马550i");

vehicles [3] = new Bus("4","宝马","宝马550i");

vehicles [4] = new Bus("5","宝马","宝马550i");

2、实现多态的步骤:(动态的多态:需要在运行当中才知道该调用什么方法)

1)编写父类、派生子类

2)在子类中重写父类的方法

3)用父类的数据类型引用子类对象

4)调用重写的方法

补充:静态的多态叫做方法重载

3、补充

类型转换instanceof

我们在使用Employee salary = new Salary("",1,"",2,200000);时,

用到了向上转换;而Salary s2 = (salary)salary;却是向下转换,

但是我们不知道转化后是否正确。

System.out.println(salary instanceof Employee); //true

System.out.println(salary instanceof Salary);  //true

System.out.println(salary instanceof Hourly); //false

三、接口

1、写法

public interface 类名();

2、注意问题

编译的后缀名依然是.java,仍然可以保存为.class;

接口是没有构造方法的,也不能被实例化

可以省略掉public 和 abstract

接口中的方法都是抽象方法

记住把注释写好!

在接口中的成员变量都是公有、静态、常量的

如:public static final name = "abc";

3、实现接口

implements 后加接口名称

实现接口的类必须必须实现接口里所有的方法

一个类可以实现多个接口(类似于多重继承)

Implements和extends都是is-a的关系

接口里可以声明属性,默认都是public static final

接口继承接口是可以多重继承的(一个接口可以继承多个接口)

4、使用接口的原则

1)使用接口解决多继承

2)使用接口为外部类添加功能

3)以面向对象的角度考虑,将一个类与生俱来的特征和行为和

依赖于外部的可选特征和行为分离,让类尽可能的单纯,即接口

5、接口的优点

1)将设计和实现分离,对外(调用者)隐藏了实现(  而通常调用者也不需要关心实现)

2)面向接口编程是oop的核心

6、接口和抽象类的区别

1)接口里的所有方法都是abstract的,所有的属性都是public static final

2)抽象类是接口的部分实现,既能定义abstract方法,

也能定义普通方法的属性,比接口更灵活

补充:

获取当前时间

Data date = new Date();

四、静态成员变量

静态类成员

用类成员(类变量和类方法)

不需要创建实例,可以通过:  className.variableName的形式直接调用(类名打点调用)

1、静态初始化块  static {   System.out.println("静态代码块");  }

2、非静态初始化块(成员代码块)    {   System.out.println("非静态代码块");  }

注意:在同一个类中,静态代码块和非静态代码块都在构造器之前被执行。

当这个类继承父类的时候,非静态代码块在父类的构造方法之后执行

即:

静态代码块

父类构造器

非静态代码块

子类构造器

静态代码块是所有成员共享的,所以创建对象只执行一次。

内部类

在java中,还可以在类的内部定义类。

这种在类的内部定义的类,称为内部类。

内部类所在的类称为外部类

内部类的分类

按位置的不同分为成员内部类(写在类当中)和局部内部类(写在方法当中)

成员内部类的特例是静态内部类

局部内部类的特例是匿名内部类

注意:内部类的方法可以访问外部的成员,但静态内部类只能引用静态成员和方法

局部内部类调用的成员变量是由final修饰的

静态内部类的实例化是需要用外部类类名打点实例化的

成员内部类的创建:   Outter outter = new Outter();   Outter.Inner1 = outter.new Inner1();

局部内部类的创建:   outter.show();(我们已经局部内部类所在的方法中初始化对象)

匿名内部类的创建:   有时候我们局部内部类所在的方法引用到一个接口时,

而接口的内容很少,我们不想再为接口创建一个类,就要用到

匿名内部类:

同上,

outter.print(new Inter(){

@Override

public void printflnface(){

System.out.pirntln("匿名内部类打印");

}

});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值