JAVA继承、多态与接口

一、继承
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("匿名内部类打印");

  }

});

时间: 2024-08-07 04:32:21

JAVA继承、多态与接口的相关文章

初识JAVA(【面向对象】:pub/fri/pro/pri、封装/继承/多态、接口/抽象类、静态方法和抽象方法;泛型、垃圾回收机制、反射和RTTI)

JAVA特点: 语法简单,学习容易 功能强大,适合各种应用开发:J2SE/J2ME/J2EE 面向对象,易扩展,易维护 容错机制好,在内存不够时仍能不崩溃.不死机 强大的网络应用功能 跨平台:JVM,字节码 两个命令: javac helloworld.java:将Java文件编译为字节码的.class文件 java helloworld:运行Java程序...??暂时这么认为 数据类型: 普通数据类型:int a=3; 对象数据类型:使用关键字new,String s=new String("

JAVA基础笔记(很实用)继承-多态-抽象类-接口-异常-集合-IO-线程-Socket

第七章:Java继承 一.继承的概念 1.一个父类派生出一个子类的机制称为继承. 2.承是重用程序代码的有力手段,当多个类之间存在相同的属性和方法时,可以从这些类中抽象出父类. 3.们只需要在父类中定义这些属性和方法,而子类无须重新定义这些属性和方法,直接从父类继承即可. 4.通过继承,子类就会自动的拥有在父类中定义的属性和方法. 5.两个或多个类的成员中存在一部分相同的情况,通过继承机制,可以利用现有的类来创建新的类. 6.子类不但拥有父类的成员,还可以定义新的成员. 7.可以提高软件的可重用

JAVA 之 多态 抽象 接口

一:多态 1:多态   一个对象有多种形式的能力 2:步骤 1编写父类派生子类 2子类重写父类方法 3用父类的数据类型引用子类对象 3:静态多态的实现方式就是方法重载 4:动态多态的实现方式就是重写父类中同名成员方法 5:使用instanceof关键字判断对象的真正类型 语句形式   引用instanceof 类名 eg;Empe=new Hourly(); if(einstanceofHourly){ Hourlyx=(Hourly) e;// 强制转换一个Hourly类型 } 6:多态的应用

java----基础(this,继承,多态,抽象类,接口)

this指针 this指针在类定义时用到,this属于用类实例化的对象,只能在定义类的时候使用:(在下面的代码中会有体现) 类变量&类方法 定义: 访问修饰符 static+数据类型+变量名 所有该类的对象均可访问,均可修改,不会在调用后初始化,相当于全局变量. 可以被所有对象访问到,并且可以通过类访问到  类名.类变量 静态方法 == 类方法 可以被类名和对象访问到 原则上类变量用类方法来访问 类方法中不能访问非类变量,类变量可以被非类方法访问. 四种访问控制符: public : 对外公开

Java面向对象多态和接口

一.多态 1.通过多态可以减少类中的代码量,可以提高代码的可扩展性.继承是多态的基础,没有继承就没有多态. 2.把子类转换为父类称为向上转型,自动进行类型转换.把父类转换为子类称为向下转型,必须进行强制类型转换. 3.向上转型后通过父类引用变量调用的方法是子类覆盖或继承父类的方法,通过父类引用变量无法调用子类特有的方法. 4.向下转型后可以访问子类特有的方法.必须转换为父类指向的真实子类类型,否则将出现类型转换异常ClassCasException. 5.instancefo运算符用于判断一个对

java 继承类与接口问题

java 先extends 继承类,再implements 继承接口 1 public class DataBase extends ClassBase implements Ijiekou { 2 3 }// end

Java的多态体现 --- 接口

/** * * @author Administrator * 功能:接口体现多态 */ package com.test4; public class Test { public static void main(String[] args) { // TODO Auto-generated method stub CarShop aShop = new CarShop(); aShop.sellCar(new BMW()); aShop.sellCar(new CherryQQ()); Sy

Java继承多态

一. 父类引用指向子类对象父类名(接口名) 对象名=new 子类(接口)名称() 二. 父子继承关系中,成员变量重名1.直接通过子类对象访问成员变量 =左边是谁,就优先用谁2.间接通过成员方法访问成员变量 该方法属于谁,就优先用谁成员方法重名 创建对象是谁,优先用谁的方法,没有向上找方法的覆盖重写(同,同)和重载(同,不同)@Override 注解,安全检测三. 方法覆盖重写时,注意:1.方法名,参数列表必须相同2.子类方法的返回值(String)必须[小于等于]父类方法(Object)的返回值

Java有关多态类的小程序

1.使用instanceof运算符判断一个对象是否可以转换为指定的类型: 代码: public class TestInstanceof { public static void main(String[] args) { //声明hello时使用Object类,则hello的编译类型是Object,Object是所有类的父类 //但hello变量的实际类型是String Object hello = "Hello"; //String是Object类的子类,所以返回true. Sys