Java面向对象多态


7.2对象

7.2.1创建对象

对象是类的实例

类的名称 对象名称 = new 类的名称();

7.3继承

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

在 Java 中通过 extends 关键字可以申明一个类是从另外一个类继承而来的,一般形式如下:

class 父类 {

}

class 子类 extends 父类 {

}

public class Animal {

private String name;

private int id;

public Animal(String myName, String myid) {

//初始化属性值

}

public void eat() {  //吃东西方法的具体实现  }

public void sleep() { //睡觉方法的具体实现  }

}

public class Penguin  extends  Animal{

}

implements关键字

public interface A {

public void eat();

public void sleep();

}

public interface B {

public void show();

}

public class C implements A,B {

}

super 与 this 关键字

super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。

this关键字:指向自己的引用。

class Animal {

void eat() {

System.out.println("animal : eat");

}

}

class Dog extends Animal {

void eat() {

System.out.println("dog : eat");

}

void eatTest() {

this.eat();   // this 调用自己的方法

super.eat();  // super 调用父类方法

}

}

public class Test {

public static void main(String[] args) {

Animal a = new Animal();

a.eat();

Dog d = new Dog();

d.eatTest();

}

final关键字

final 关键字声明类可以把类定义为不能继承的,即最终类;或者用于修饰方法,该方法不能被子类重写:

声明类:

final class 类名 {//类体}

声明方法:

修饰符(public/private/default/protected) final 返回值类型 方法名(){//方法体}

注:实例变量也可以被定义为 final,被定义为 final 的变量不能被修改。被声明为 final 类的方法自动地声明为 final,但是实例变量并不是 final

构造器

构造器

子类是不继承父类的构造器(构造方法或者构造函数)的,它只是调用(隐式或显式)。如果父类的构造器带有参数,则必须在子类的构造器中显式地通过 super 关键字调用父类的构造器并配以适当的参数列表。

如果父类构造器没有参数,则在子类的构造器中不需要使用 super 关键字调用父类构造器,系统会自动调用父类的无参构造器。

class SuperClass {

private int n;

SuperClass(){

System.out.println("SuperClass()");

}

SuperClass(int n) {

System.out.println("SuperClass(int n)");

this.n = n;

}

}

// SubClass 类继承

class SubClass extends SuperClass{

private int n;

SubClass(){ // 自动调用父类的无参数构造器

System.out.println("SubClass");

}

public SubClass(int n){

super(300);  // 调用父类中带有参数的构造器

System.out.println("SubClass(int n):"+n);

this.n = n;

}

}

// SubClas2 类继承

class SubClass2 extends SuperClass{

private int n;

SubClass2(){

super(300);  // 调用父类中带有参数的构造器

System.out.println("SubClass2");

}

public SubClass2(int n){ // 自动调用父类的无参数构造器

System.out.println("SubClass2(int n):"+n);

this.n = n;

}

}

public class TestSuperSub{

public static void main (String args[]){

System.out.println("------SubClass 类继承------");

SubClass sc1 = new SubClass();

SubClass sc2 = new SubClass(100);

System.out.println("------SubClass2 类继承------");

SubClass2 sc3 = new SubClass2();

SubClass2 sc4 = new SubClass2(200);

}

}

输出结果为:

------SubClass 类继承------

SuperClass()

SubClass

SuperClass(int n)

SubClass(int n):100

------SubClass2 类继承------

SuperClass(int n)

SubClass2

SuperClass()

SubClass2(int n):200

重写(Override)

重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!

重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。

重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。例如: 父类的一个方法申明了一个检查异常 IOException,但是在重写这个方法的时候不能抛出 Exception 异常,因为 Exception 是 IOException 的父类,只能抛出 IOException 的子类异常。

在面向对象原则里,重写意味着可以重写任何现有方法。实例如下:

class Animal{

public void move(){

System.out.println("动物可以移动");

}

}

class Dog extends Animal{

public void move(){

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关键字的使用

当需要在子类中调用父类的被重写方法时,要使用super关键字。

TestDog.java 文件代码:

class Animal{

public void move(){

System.out.println("动物可以移动");

}

}

class Dog extends Animal{

public void move(){

super.move(); // 应用super类的方法

System.out.println("狗可以跑和走");

}

}

public class TestDog{

public static void main(String args[]){

Animal b = new Dog(); // Dog 对象

b.move(); //执行 Dog类的方法

}

}

重载(Overload)

重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。

每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。

最常用的地方就是构造器的重载。

重载规则:

被重载的方法必须改变参数列表(参数个数或类型不一样);

被重载的方法可以改变返回类型;

被重载的方法可以改变访问修饰符;

被重载的方法可以声明新的或更广的检查异常;

方法能够在同一个类中或者在一个子类中被重载。

无法以返回值类型作为重载函数的区分标准。

public class Overloading {

public int test(){

System.out.println("test1");

return 1;

}

public void test(int a){

System.out.println("test2");

}

//以下两个参数类型顺序不同

public String test(int a,String s){

System.out.println("test3");

return "returntest3";

}

public String test(String s,int a){

System.out.println("test4");

return "returntest4";

}

public static void main(String[] args){

Overloading o = new Overloading();

System.out.println(o.test());

o.test(1);

System.out.println(o.test(1,"test3"));

System.out.println(o.test("test4",1));

}

}

多态

Java面向对象多态的更多相关文章

  1. JAVA面向对象-多态的理解

    面向对象编程有三个特征,即封装.继承和多态. 封装隐藏了类的内部实现机制,从而可以在不影响使用者的前提下改变类的内部结构,同时保护了数据. 继承是为了重用父类代码,同时为实现多态性作准备.那么什么是多 ...

  2. Java面向对象-------多态总结

    1.多态:是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作,如图所示: 多态性是对象多种表现形式的体现. 2.多态作用: 1. 消除类型之间的耦合关系 ...

  3. java 面向对象 — 多态

    注意:如果用父类引用指向子类对象的时候.不可以调用,子类中有但是父类中没有的方法. 抽象 方法没有具体方法,以分号结束.例:public abstract void call(); 1.接口必须要有a ...

  4. Java面向对象—多态

    概述:同一个事物,在不同的时刻表现出不同的状态. 代码中如何体现: 要有继承, 要有方法重写, 父类引用指向子类对象 多态的成员访问特点 成员变量:编译看左边(父类), 运行看左边 成员方法:编译看左 ...

  5. JAVA面向对象-----多态

    多态的概述 1:什么是多态 一个对象的多种状态 (老师)(员工)(儿子) 教师 a =老钟; 员工 b= 老钟; 2:多态体现 1:Father类 1:非静态成员变量x 2:静态成员变量y 3:非静态 ...

  6. Java面向对象----多态概念,对象上下转型

    概念:同一操作作用于某一类对象,可以有不同的解释,产生不同的执行结果 多态存在的三个必要条件 需要存在继承和实现关系 同样的 方法调用而执行不同操作,运行不同的代码(重写操作) 在运行时父类或者接口的 ...

  7. Java面向对象的多态

    Java中多态的概念是面向对象中除封装和继承外非常重要的知识点,也是Java面向对象三大特性最后一个特性 多态其实就是指对象存在的多种形态,多态分为引用多态和方法多态 引用多态的含义就是:父类的引用可 ...

  8. JAVA 面向对象中的多态

    多态是继封装.继承之后,面向对象的第三大特性. 现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态. Java作为面向对象的语言,同样可以描述一个 ...

  9. 3.java面向对象编程三大特性之多态

    面向对象编程的三大特性:封装.继承.多态 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对类的外部而言它的内部实现细节是隐藏的,暴露给外界的只是它的实现方法. ...

随机推荐

  1. docker run和nsenter

    docker run和nsenter 1,本机运行java -version没有内容, 使用 docker run java java -version就有内容了: 2, docker run -d ...

  2. sizeof小览

    一.文章来由-一道面试题迁出的探究 我发现我已经形成一种习惯写来由了,以后看博客的时候能够让我回顾起为什么出现这个问题,我用什么方法解决的,既然形成习惯就让这个习惯保持下去吧.今天实验室师姐在看书,一 ...

  3. [转]Android程序框架设计

    这篇文章主要内容来自于之前我讲的一个PPT文档,现在将其整理如下.欢迎指正.以下的内容都是来自于我自身的经验,欢迎大家多提自己的建议. 1.一些概念 模式的定义: 每个模式都描述了一个在我们的环境中不 ...

  4. Linux VM环境配置

    1. 直接打 ifconfig ,显示 bash: ifconfig: command not found 打入全路径,查看IP     /sbin/ifconfig 2. 主机ping不通虚拟机, ...

  5. tomcat连接mysql的3个问题解决

    转载请标明出处: 本文出自:[ouyida3的博客] 1.BasicDataSourceFactory Caused by: java.lang.ClassNotFoundException: org ...

  6. JavaScript Patterns 1 Introduction

    1.1 Pattern "theme of recurring events or objects… it can be a template or model which can be u ...

  7. imagebutton 设置点击和按压效果

    实现 点击 时 有按压效果 更换颜色 <ImageButton android:id="@+id/mediacontroller_Fullscreen_or_not" and ...

  8. 【POJ 1716】 Integer Intervals

    [题目链接] 点击打开链接 [算法] 差分约束系统 [代码] #include <algorithm> #include <bitset> #include <cctyp ...

  9. JSP-Runoob:JSP 日期处理

    ylbtech-JSP-Runoob:JSP 日期处理 1.返回顶部 1. JSP 日期处理 使用JSP最重要的优势之一,就是可以使用所有Java  API.本章将会详细地讲述Java中的Date类, ...

  10. [App Store Connect帮助]二、 添加、编辑和删除用户(6)生成 API 密钥

    如果已批准您访问 App Store Connect API,您可以生成 API 密钥,以便使用该密钥配置.认证和使用 App Store Connect 服务. 有关管理和保护您密钥的更多信息,请参 ...