java基础复习(八)

java基础第八天

1.多态(polymorphic)概述 事物存在的多种形态

多态 前提

  • 要有继承关系
  • 要有方法重写
  • 要有父类引用指向子类对象
Animal a = new Cat();//父类引用指向子类对象
a.eat();

成员变量

class Demo2_Polymorphic{
    public static void main(String[] args){
        Father f = new Son();
        System.out.println(f.num);//10
    }
}
/*
成员变量
编译看左边(父类),运行看右边
*/
class Father {
    int num = 10;
}
class Son extends Father{
    int num = 20;
}

成员方法

//成员方法 编译看左边 运行看右边 动态绑定
class Demo2_Polymorphic{
    public static void main(String[] args){
        Father f = new Son();
        System.out.println(f.num);//10
    }
}
/*
成员变量
编译看左边(父类),运行看右边
*/
class Father {
    int num = 10;
    public void print(){
        System.out.println("father");
    }
}
class Son extends Father{
    int num = 20;
    public void println("son");
}

静态方法

静态看左边(父类),运行看左边。

(静态和静态类相关,算不上重写,所以访问还是左边的,只有非静态的成员方法,编译看左边,运行看右边)

面向对象(超人的故事)

普通人 同时是超人

class Person{
    String name = "John";
    public void 谈生意(){
        System.out.println("谈生意");
    }
}
class SuperMan extends Person {
    String name = "superman";
    public void 谈生意(){
        System.out.println("谈生意");
    }
    public void fly(){
        System.out.println("我能飞");
    }
}

class Demo {
    public static void main(String[] args){
       Person p = new SuperMan();
        System.out.println(p.name);//john
        p.谈生意();//底子里是个超人谈的生意肯定是几个亿
        //p.fly(); 还没变身 不能飞
    }
}

上转型-------

基本数据类型自动类型提升和强制类型转换

int i = 10;
byte b = 20;
// i = b;
// b = (byte)i;

父类引用指向子类对象就是向上转型

Person p = new Son();

向下转型

SuperMan sm = (SuperMan)p;//变身

多态的好处:

提高了代码的维护性

提高了代码的扩展性

多态的弊端:

不能使用子类特有的属性和行为。

关键字 instanceof判断前边的引用是否是后边的数据类型

多态中的题目分析题

抽象

抽象就是看不懂

abstract

抽象类

抽象类不一定有抽象方法,有抽象方法的类一定是抽象类或者是接口。

抽象类不能被实例化。由具体的子类实例化。

抽象类的子类

  • 要么是抽象类
  • 要么重写抽象类中所有的抽象方法
abstract class Animal {//抽象类
    public abstract void eat();//抽象方法
}

抽象类中的成员特点

a:成员变量:既可以是变量,也可以是常量。

abstract是否可以修饰成员变量?不能修饰成员变量

构造方法:有

用于子类访问父类数据的初始化。

抽象类和抽象方法必须用abstract关键字修饰

abstract ClassName

public abstract function();

抽象类成员方法特性:

a:抽象方法,强制要求子类做的事情

b:非抽象方法,子类继承的事情,提高代码复用性。

葵花宝典-----0.0

面试题

一个抽象类可以没有抽象方法吗?

可以

abstract不能和那些关键字共存

1.static 被abstract修饰的方法没有方法体 被static修饰的可以用类名.调用 但是类名.抽象方法是没有意义的。

2.final 被final修饰的不能被继承,而abstract强制重写,冲突

3.private 被abstract是为了让子类看到,被private修饰不让子类访问。

接口的概述及其特点

狭义角度 java中的interface

广义角度 对外提供规则的都是接口

一流公司卖接口,做规则。

二流公司做品牌、产品。

三流公司卖服务、好评哦。

接口特点:

接口关键字interface

interface 接口名

接口用implements表示

class 类名 implements接口名{}

接口不能实例化 因为调用抽象方法没有意义

如何实例化?用多态的形式

Inter i = new Demo(); //父类引用指向子类

接口的子类

可以是抽象类。但是意义不大。

可以是具体类。要重写接口中的所有抽象方法。

接口的成员变量的特点:

只能是常量,并且是静态的并公共的。

默认修饰符:public static final

建议:自己手动给出

构造方法:接口没有构造方法

成员方法:只能是抽象方法

​ 默认修饰符:public abstract

​ 建议自己手动给出

类与类,类与接口,接口与接口的关系

a:类与类

继承关系,只能单继承,可以多层继承

b:类与接口

实现关系,可以单实现,也可以多实现

并且还可以在继承一个类的同时实现多个接口

c:接口与接口

继承关系,可以单继承,也可以多继承。

抽象类和接口的区别

抽象类:

成员变量:可以变量,也可以是常量

构造方法:有

成员方法:可以抽象,也可以非抽象

接口:

成员变量:只可以使常量

成员方法:只可以是抽象

设计理念区别:

抽象类 被继承体现的是is a的关系,抽象类中定义的是该集成体系的共性功能。

接口 被实现体现的是 like a的关系。接口中定义的是该继承体系的扩展功能。

面向对象是在体现一种封装的思想吗??

本文链接:

https://heyzen.club/index.php/Coder/225.html
1 + 6 =
快来做第一个评论的人吧~