继承就是子类继承父类的特征和行为,使得子类对象或者说实例具有父类的实例
域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
动物包括哺乳动物,哺乳动物又包括猫和狗,所以猫和狗是有一些相同的特性的
//代码格式
class 父类 {
}
class 子类 extends 父类 {
}
编程时经常会有大量重复的代码,导致臃肿,降低开发效率,所以Java继承的作用就体现出来了:定义一个类做为父类,将一些共有的属性和方法定义在这个类中,当某一个类需要使用到这些方法和属性的时候,就可以直接通过extends关键字就可以直接调用父类中的成员变量和方法,更为方便快捷。
JAVA不支持多继承,只支持单继承和多重继承,也就是说子类和父类只能一对一,继承关键字extends只能承载一个类,具体形式如下:
定义:子类对父类的允许访问的方法的实现过程进行重新编写,不能改变 返回值和形参。即外壳不变,核心重写
代码实例:
class Animal{
public void eat(){
System.out.println("动物需要吃东西");
}
}
class Dog extends Animal{
public void eat(){
//再次用使用super关键字:super.move();
//super关键字可调用父类的方法来重写
System.out.println("狗改不了吃屎");
}
}
public class TestDog{
public static void main(String args[]){
Animal a = new Animal(); // Animal 对象
Animal b = new Dog(); // Dog 对象
a.move();// 执行 Animal 类的方法
b.move();//执行 Dog 类的方法
}
}
/*输出结果
动物需要吃东西
狗改不了吃屎
使用super关键字后,b.move将能生成上两行结果
*/
. 重写规则:
定义:重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同, 重载方法时必须每个方法的参数列表都不一样
重载规则:
接口在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。
接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。
除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。
接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。另外,在 Java 中,接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象
定义接口的语法格式
[可见度] interface 接口名称 [extends 其他的接口名名] {
// 声明变量
// 抽象方法
实现接口的语法格式
...implements 接口名称[, 其他接口名称, 其他接口名称..., ...] ...
示例如下:
//定义接口
public interface Animal{
public void behavior();
}
//实现接口
public class Dog implement Animal{
public void behavior(){
System.out.println("Dogs bark!");
}
}
public class Cat implement Animal{
public void behavior(){
System.out.println("Mew!");
}
}
相似点:
区别:
区别1:抽象类描述事物的本质,接口描述事物的功能,如水杯,保温杯,保温: class 保温杯 extends 水杯 ;class 保温杯
implements 保温
区别2:抽象类中可以实现方法,接口不能
区别3: 接口中的成员变量只能是 public static final 类型的,抽象类没有限制
区别4:接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。
区别5:一个类只能继承一个抽象类,而一个类却可以实现多个接口。
和类的单继承类似,接口也能继承接口,而且还可以多继承,既一个接口可以继承多个接口,实例如下:
public interface Animal{
public void behavior();
}
public interface Dog extends Animal{
public void run();
public void getName(String name);
}
public interface Hashiqi extends Dog{
public void breakHome();
public void Stupid(String behavior);
}
}
多继承:
public interface Bomei extends Animal,Dog
此时接口Bomei的实现类应该继承的两个接口中的共3个方法
多态是同一个行为具有多个不同表现形式或形态的能力。
多态性是对象多种表现形式的体现。
比如:
//父类引用指向子类对象
Parent p = new Child();
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。
多态的好处:可以使程序有良好的扩展,并可以对所有类的对象进行通用处理。
以下是一个多态实例的演示,详细说明请看注释:
package com.zt;
public class Test {
public static void main(String[] args) {
show(new Cat()); // 以 Cat 对象调用 show 方法
show(new Dog()); // 以 Dog 对象调用 show 方法
Animal a = new Cat(); // 向上转型,父类引用指向子类对象
a.eat(); // 调用的是 Cat 的 eat
Cat c = (Cat)a; // 向下转型
c.work(); // 调用的是 Cat 的 work
}
public static void show(Animal a) {
a.eat();
// 用instanceof做类型判断
if (a instanceof Cat) { // 猫做的事情
Cat c = (Cat)a;//类型转换
c.work();
} else if (a instanceof Dog) { // 狗做的事情
Dog c = (Dog)a;
c.work();
}
}
}
abstract class Animal {
abstract void eat();
}
class Cat extends Animal {
public void eat() {
System.out.println("吃鱼");
}
public void work() {
System.out.println("抓老鼠");
}
}
class Dog extends Animal {
public void eat() {
System.out.println("啃骨头");
}
public void work() {
System.out.println("拆家");
}
}
/*输出结果:
吃鱼
抓老鼠
啃骨头
拆家
吃鱼
抓老鼠
*/