javase基础10

1.抽象类概述

抽象类用来描述一种类型应该具备的基本特性与功能,具体如何去完成这些行为由子类通过方法重写来完成.
具有抽象方法的类一定为抽象类.

2.抽象类,方法定义的格式

abstract 在class前修饰类
abstract class 类名{}

3.抽象方法定义的格式

abstract在访问权限后,返回值类型钱修饰方法,方法没有方法体
public abstract 返回值类型 方法名(参数);

/*
 * 抽象的父类
 */
public abstract class Employee{

    //抽象方法。需要abstract修饰,并分号;结束
    public abstract void work();
}

/*
 * 定义抽象父类的具体子类
 */
public class Waiter extends Employee {

    /*
     * 重写了父类的抽象方法,加入了方法体,描述出具体逻辑
     */
    @Override
    public void work() {
        System.out.println("为顾客服务");
    }
}

public static void main(String[] args) {

        //创建一个父类对象不可以,因为该类为抽象类
//        Employee e = new Employee();

        //创建具体的子类对象
        Waiter waiter = new Waiter();
        //调用子类重写的父类抽象方法
        waiter.work();
    }

4.抽象类的特点

抽象类和抽象方法都需要被abstract修饰.抽象方法一定要定义在抽象类中.
抽象类不可以直接创建对象,原因:调用 抽象方法没有意义
只要覆盖了抽象类中所有的抽象方法后,其子类才可以创建对象.否则该子类还是一个抽象类

5.抽象类的构造方法

抽象类的构造方法存在的意义:子类构造方法中通过super语句调用抽象父类的构造方法,为抽象父类中的成员变量赋值,而赋值后的成员变量可以被子类的对象使用

/*
 * 抽象的父类
 */
public abstract class Employee{

    //抽象类中定义正常的成员变量
    private String name;

    //构造方法
    public Employee() {
        super();
    }
    //该构造方法,不能直接被程序员调用,因为该类为抽象类,不能直接创建对象.
    //但是在创建子类对象时,子类的构造方法,可以调用父类的构造方法,为子类对象中的父类对象空间赋值
    public Employee(String name) {
        super();
        this.name = name;
    }

    public abstract void work();

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

/*
 * 定义抽象父类的具体子类
 */
public class Waiter extends Employee {

    public Waiter() {
        super();
    }

    //子类的构造方法可以调用父类的构造方法
    //这里,一个参数的子类构造,调用了父类一个参数的构造,为父类的成员变量赋值
    //但是最终还是子类对象自己使用这个成员变量
    public Waiter(String name) {
        super(name);
    }

    /*
     * 重写了父类的抽象方法,加入了方法体,描述出具体逻辑
     */
    @Override
    public void work() {
        System.out.println("为顾客服务");
    }

}

public static void main(String[] args) {

        //创建具体的子类对象时,子类的构造会调用父类的构造
        //为成员变量赋值
        Waiter waiter = new Waiter("Rose");
        //调用子类重写的父类抽象方法
        waiter.work();

        System.out.println(waiter.getName());
}

抽象类一定是个父类,因为抽象类时不断抽取共性需求而来的.
抽象类中可以不定义抽象方法,此时仅仅是不让该类创建对象,

6.接口的概念

接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的‘类‘
接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成.

//定义格式:

public interface 接口名 {
    抽象方法1;
    抽象方法2;
    抽象方法3;
}

使用interface代替了原来的class,其他步骤与定义类相同:
接口中的方法均为公共访问的抽象方法
接口中无法定义普通的成员变量

7.接口的使用方式

接口不可以创建对象。
我们使用实现来表示一个类与一个接口之间的关系,这是接口最常用的使用方法。
实现的关键字为implements。

class 类 implements 接口 {
    重写接口中方法
}

接口中定义功能,一切类需要具有该功能时均可以实现该接口,只声明了应该具备该方法,是功能的声明。
具体实现类中重写方法,实现功能,是方法的具体实现。

8,接口的注意事项

类单继承类,接口多继承接口,类多实现接口
类可以在继承一个类的同时,实现多个接口
接口与父类的功能可以重复,均代表要具备某种功能,并不冲突

9.接口中成员的特点

接口中可以定义变量,但是变量必须有固定的修饰符修饰,public static final 所有接口中的变量也称之为常量
接口中可以定义方法,方法也有固定的修饰符,public abstract
接口不可以创建对象
子类必须覆盖掉接口中所有的抽象方法后,子类才可以实例化,否则子类是一个抽象类

10.多态的概述

现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态。
Java作为面向对象的语言,同样可以描述一个事物的多种形态。如Student类继承了Person类,一个Student的对象便既是Student,又是Person。
Java中多态的代码体现在一个子类对象(实现类对象)既可以给这个子类(实现类对象)引用变量赋值,又可以给这个子类(实现类对象)的父类(接口)变量赋值。
最终多态体现为父类引用变量可以指向子类对象。
多态的前提是必须有子父类关系或者类实现接口关系,否则无法完成多态。
在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法。

11.多态类的定义格式

父类类型 变量名 = new 子类类型();
变量名.方法名();

普通类:

父类 变量名 = new 子类();

如: class Fu {}
class Zi extends Fu {}
//类的多态使用
Fu f = new Zi();

抽象类:

抽象类 变量名 = new 抽象类子类();
如:

abstract class Fu {
    public abstract void method();
}
class Zi extends Fu {
    public void method(){
        System.out.println(“重写父类抽象方法”);
    }
}    

//类的多态使用

Fu fu= new Zi();

接口:

接口 变量名 = new 接口实现类();

如:

interface Fu {
  public abstract void method();
}
class Zi implements Fu {
    public void method(){
                 System.out.println(“重写接口抽象方法”);
         }
}

//接口的多态使用
Fu fu = new Zi();

12.多态转型

多态的转型分为向上转型与向下转型两种:
向上转型:当有子类对象赋值给一个父类引用时,便是向上转型,多态本身就是向上转型的过程。
父类类型 变量名 = new 子类类型();
如:Person p = new Student();

向下转型:一个已经向上转型的子类对象可以使用强制类型转换的格式,将父类引用转为子类引用,

这个过程是向下转型。如果是直接创建父类对象,是无法向下转型的
子类类型 变量名 = (子类类型) 父类类型的变量;
如:Student stu = (Student) p; //变量p 实际上指向Student对象

13.instanceof

我们可以通过instanceof关键字来判断某个对象是否属于某种数据类型
boolean b = 对象 instanceof 数据类型;

时间: 2024-10-02 20:38:55

javase基础10的相关文章

Java复习第二天---JavaSE基础

[1]以下关于 JVM 的叙述,哪些项正确? A.JVM 运行于操作系统之上,它依赖于操作系统 B.JVM 运行于操作系统之上,它与操作系统无关 C.JVM 支持 Java 程序运行,它能够直接运行 Java 字节码文件 D.JVM 支持 Java 程序运行,它能够直接运行 Java 源代码文件 扩展名为.java的是源代码文件(文本文件):开发时编写代码的文件 扩展名为.class的是字节码文件(二进制):系统运行时执行的文件 [2]下列选项中正确的表达式是: A.byte b = 128; 

JavaSE基础之封装

JavaSE基础之封装 一.Java中的封装 1.字面意思: 包装: 2.专业含义: 面向对象的三大特征之一: 指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问. 二.封装的目的 1.隐藏类的实现细节: 2.让使用者只能通过事先预定的方法来访问数据,从而可以在该方法里加入控制逻辑,限制对成员变量的不合理访问: 3.可进行数据检查,从而有利于保证对象信息的完整性: 4.便于修改,提高代码的可维护性: 三.如何实现良好的封

java学习之路之javaSE基础1

<h2>java学习之路之javaSE基础1</h2> <div> ###01.01_计算机基础知识(计算机概述)(了解)* A:什么是计算机?计算机在生活中的应用举例 * 计算机(Computer)全称:电子计算机,俗称电脑.是一种能够按照程序运行,自动.高速处理海量数据的现代化智能电子设备.由硬件和软件所组成,没有安装任何软件的计算机称为裸机.常见的形式有台式计算机.笔记本计算机.大型计算机等. * 应用举例 * 1:科学计算 * 2.数据处理 * 3.自动控制 *

Java基础10:全面解读Java异常

Java基础10:全面解读Java异常 为什么要使用异常 首先我们可以明确一点就是异常的处理机制可以确保我们程序的健壮性,提高系统可用率.虽然我们不是特别喜欢看到它,但是我们不能不承认它的地位,作用. 在没有异常机制的时候我们是这样处理的:通过函数的返回值来判断是否发生了异常(这个返回值通常是已经约定好了的),调用该函数的程序负责检查并且分析返回值.虽然可以解决异常问题,但是这样做存在几个缺陷: 1. 容易混淆.如果约定返回值为-11111时表示出现异常,那么当程序最后的计算结果真的为-1111

JavaSe基础回顾(一)

JavaSe基础知识点总结 1.变量 变量是内存中用来存放特定数据类型数据的一块内存空间,它的值是可以改变的.Java中的变量有四个基本属性:变量名,数据类型,存储单元和变量值 变量名:合法的标识符 变量的数据类型:可以是基本类型和引用类型(必须包含类型) 存储单元:存储单元大小是由数据类型决定的,如:int 为4个字节32位 变量值:在存储单元中存放的值 变量的声明格式: 类型 变量名: 2.运算符 运算符种类                       符号 赋值运算符           

JavaSE基础之JDBC

JavaSE基础之JDBC 1.JDBC 的步骤: ①加载数据库驱动: a.MySQL:com.mysql.jdbc.Driver: b.SQLServer:com.microsoft.jdbc.sqlserver.SQLServerDriver: c.Oracle:oracle.jdbc.driver.OracleDriver: ②获取数据库链接:  a.MySQL:jdbc:mysql://localhost:3306/DataBaseName: b.SQLServer:jdbc:sqlse

java-se基础 2(注释和原生数据类型)

Java SE 第二讲: 1. Windows: notepad, editplus, ultraedit, gvim Linux: vi, vim, gedit 2. Java中的数据类型分为两大类: 1) 原生数据类型 (Primitive Data Type) 2) 引用类型(对象类型) (Reference Type) 3. 变量与常量:所谓常量,就是值不会变化的量:所谓变量,就是值可以变化的量. 4. 如何定义变量? 变量类型 变量名; int a; 5. 如何为变量赋值? 变量名 =

javaSE基础07

javaSE基础07 一.static静态修饰符 用了static修饰的变量就会变成共享的属性,只会初始化一次,在内存中只存在一个,并且每个对象都可以访问,存放在方法区(数据共享区) 1.1 static用来修饰成员变量 一个成员变量被static修饰了叫静态成员变量,如果没有修饰叫非静态成员变量 静态成员变量的访问方式: 1.用对象进行访问:对象.变量名 2.还可以通过类名来访问:类名.变量名 使用注意点: 1.不要认为方便就将所有的变量用static修饰,只有当这个数据真正需要共享的时候才用

javase基础复习攻略《二》

今天就开始的真正走进JAVASE的世界,本篇介绍的是:JAVASE基础语法,大家如果有C语言的基础,对于本节内容一定感觉非常轻松,编程语言之间的都是相通的,只不过C语言属于面向过程编程,而JAVA语言则是一种面向过程的设计思路,相信以后的发展一定会朝着面向服务的方向. 废话不多说,开始今天的总结: 1.标示符: 标示符为何物?它就是JAVA规定的一种命名规则.凡是需要你自己进行命名的地方都需要遵守JAVA的标示符规则,JAVA标识符包括:a.标识符是由英文字母.下划线(_).美元符号($)和数字