Java学习日记基础篇(六)—— 抽象类、接口、final

抽象类

为什么要有抽象类?

  因为父类方法有不确定性,我们在Animal中定义了一个方法,但是它会被子类的方法覆盖掉,我们就不知道这个方法原本是做什么的

 1 public class test1
 2 {
 3     public static void main(String[] args) {
 4     }
 5 }
 6
 7 class Animal
 8 {
 9     String name;
10     int age;
11
12     //动物会叫
13     public void cry()
14     {
15         System.out.println("不知道怎么叫");
16         //问题是这个方法永远都不会用到
17     }
18 }

不会被用到的父类方法

  当父类的一些方法不能确定时,可以用 abstract 关键字来修饰该方法或类,称为抽象方法和抽象类。

 1 //抽象类
 2 abstract class Animal
 3 {
 4     String name;
 5     int age;
 6     //动物会叫
 7     abstract public void cry();
 8 }
 9
10 //抽象类仍然可以被继承

定义一个抽象类

 1 public class test1
 2 {
 3     public static void main(String[] args) {
 4     }
 5 }
 6 //抽象类
 7 abstract class Animal
 8 {
 9     String name;
10     int age;
11     abstract public void cry();
12 }
13 //当一个类继承的父类是抽象类的话
14 //需要我们把抽象类中的所有的抽象方法全部实现
15 class Cat extends Animal
16 {
17     //实现父类的cry抽象方法
18     public void cry()
19     {
20     }
21 }

继承一个抽象类

抽象类的注意事项

  1. 用abstract 关键字来修饰一个类时,这个类就叫做抽象类
  2. 用abstract 关键字来修饰一个方法时,这个方法就叫做抽象方法
  3. 抽象方法在编程中用的不是很多,但是爱考
  4. 抽象类不能被实例化 —— 不能被 new 抽象类
  5. 抽象类可以没有抽象方法
  6. 一旦类包含了abstract方法,则这个类必须声明为abstract类
  7. 抽象方法不能包含主体 
  8. 抽象类中可以有实现的方法,但是如果前面加上abstract就不能被实现

接口

为什么要有抽象类?

  usb插槽就是现实中的接口—— 我们可以把手机,U盘都插到插槽上而不用担心出问题,因为usb插槽的厂家和做设备的厂家都遵守了统一的规定和尺寸,排线等等,但是给设备的内部结构显然是不相同的

  硬件上的设计在软件中也是大量存在的

package test;
/*
 * 作者:woliaoa
 * 功能:接口的实现
 * 时间:18.9.16
 */
public class test2
{
    public static void main(String[] args)
    {
        Computer computer  = new Computer(); //创建
        Camera camera1 = new Camera(); //创建Camera
        Phone phone1 = new Phone(); //创建Phone
        computer.useUsb(camera1); //使用computer中的定义的useUsb方法,并把对象camera1传递给形参
        computer.useUsb(phone1);//使用computer中的定义的useUsb方法,并把对象phone1传递给形参

    }

}
//定义一个接口
interface Usb
{
    //在接口中声明了两个方法
    public void start();
    public void stop();
}

//编写照相机类,并实现Usb接口 —— implements是实现的意思
//一个重要的原则,当一个类实现了一个接口,就要求该类把这个接口的所有方法统统实现
class Camera implements Usb
{
    public void start()
    {
        System.out.println("我是相机,我开始工作了");
    }
    public void stop()
    {
        System.out.println("我是相机,我停止工作了");
    }
}

class Phone implements Usb
{
    //实现接口中的所有方法
    public void start()
    {
        System.out.println("我是手机,我开始工作了");
    }
    public void stop()
    {
        System.out.println("我是手机,我停止工作了");
    }
}
//计算机类,
class Computer
{
    //开始使用Usb接口
    public void useUsb(Usb usb)//前面的是Usb接口 后面的是局部变量usb
    {
        usb.start(); //让形参usb,调用Usb接口中的start方法
        usb.stop();  //让形参usb,调用Usb接口中的stiop方法
    }
}

运行结果:
我是相机,我开始工作了
我是相机,我停止工作了
我是手机,我开始工作了
我是手机,我停止工作了

用代码实现USB接口

  接口就是给出一些没有内容的方法,封装到一起,到某个类要使用的时候,在根据具体情况把这些方法写出来。语法:

//定义一个接口
interface 接口名
{
	被初始化的变量;
	方法;
}

//使用一个接口
class 类名 implement 接口
{
	变量;
	方法;
}

接口的注意事项  

  1. 接口不能被实例化 —— 不能被new
  2. 接口中的所有方法都不能有主体,抽象类中可以有非抽象方法被实现,但是接口中的方法都不能被实现—— 接口是更加抽象的抽象类
  3. 一个类可以实现多个接口—— class Camera implements Usb,Usb3.0 {.....}
  4. 接口中可以有变量,但是要被初始化【变量不能用private和protected修饰】
    1. 接口中的变量本质上都是static的,而且是final的,不管你加不加static修饰
    2. 在java开发中,我们经常把 经常用的变量,定义在接口中,作为全局变量使用,因为它是静态的。
      访问形式:接口名.变量名
  5. 一个接口不能继承其它的类,但是可以继承别的接口

public class test2
{
    public static void main(String[] args)
    {
        System.out.println(Usb.a);    //调用Usb接口中的a变量
    }

}
//定义一个接口
interface Usb
{
    int a=1;
    //在接口中声明了两个方法
    public void start();
    public void stop();
}

调用接口中的变量

 小结:接口是更加抽象的抽象类,抽象类里有些方法可以有方法体,接口里的所有方法都没有方法体。接口体现了程序设计的多态和高内聚和低耦合的设计思想。

原文地址:https://www.cnblogs.com/houzhaohui/p/9655726.html

时间: 2024-10-10 17:01:34

Java学习日记基础篇(六)—— 抽象类、接口、final的相关文章

Java学习日记基础篇(七) —— 数组、排序

数组 为什么要有数组? 案例:一个养鸡场有六只鸡,他们的体重分别为3kg,5kg,1kg,3.4kg,2kg,50kg.请问这六只鸡的总体重和平均体重是多少? 1 public class test5 2 { 3 public static void main(String[] args) 4 { 5 //如果没有数组就要定义六个变量,然后算出结果,太麻烦了 6 //现在我们定义一个可以存放6个float类型的数组 7 float arr[] = new float[6]; 8 //给数组的各个

小码蚁java学习日记——起航篇

很久很久以前,大约公元2005年就知道知晓java. 一直都有过了解,但从未系统学习. 今天,就在今天,这是一个伟大的日子,伟大的12月18号,我终于坚定了利用工作之余学习java的决心,一个phper 就要变身了. 首先选个方向吧,其实这个好真麻烦,近水楼台先得月,还是写web吧. 好吧,今天就这么多! 以后还希望大家多多指点小的,助我在java的道路上越走越远.

Java学习笔记——基础篇

Tips1:eclipse中会经常用到System.out.println方法,可以先输入syso,然后eclipse就会自动联想出这个语句了!! 学习心得: *初始化 *包.权限控制 1.包(package)概念的引入是为了防止类名冲突.package语句要作为java源文件的第一条语句. 2.两个类在同一个包中,可以相互调用:两个类在不同的包中,若想引用则必须通过import语句导入,格式为:import 包名.子包名.类名. 3.如果在程序中同时导入了两个包的同类名,则在使用时必须明确的写

java学习日记-基础-随机数组的求余运算

时间是2017年5月6日,青年节刚过,坐标上海,沪漂2个月. 就这样简短地开始吧.                                by:slowcity [案例分析1] 要求定义一个int 型数组a,包含100 个元素,保存100个随机的4 位数.再定义一个int 型数组b,包含10 个元素.统计a 数组中的元素对10 求余等于0 的个数,保存到 b[0]中:对10 求余等于1 的个数,保存到b[1]中,--依此类推 一般看到这类的最基本的思路:1先建立一个含数组存随机四位数 2

java学习日记-基础-字符串内容替换

代码和内容均来自网络,非原创,自己就是对代码进行了一些简单的注释,帮助自己理解. import java.util.Scanner; /** * * @author sunzc 转换字符串,大写变小写,小写变大写,数字不变,其他变为* */ public class Transfer { public static void main(String[] args) { // String str = "ABC123abcfadfjbJBHJHJDsa"; String str = &q

Lua 学习之基础篇六<Lua 之IO 库>

引言 I/O 库提供了两套不同风格的文件处理接口. 第一种风格使用隐式的文件句柄: 它提供设置默认输入文件及默认输出文件的操作, 所有的输入输出操作都针对这些默认文件. 第二种风格使用显式的文件句柄. 当使用隐式文件句柄时, 所有的操作都由表 io 提供. 若使用显式文件句柄, io.open 会返回一个文件句柄,且所有的操作都由该文件句柄的方法来提供. 表 io 中也提供了三个 和 C 中含义相同的预定义文件句柄: io.stdin io.stdout io.stderr. I/O 库永远不会

java学习日记-基础-列出2~100内的素数

素数的概念:一个整数如果只能整除1和它本身,那么这个整数就是一个素数 方法一:素数是除去能被2整除.3整除.5整除.7整除的整数,但包含2,3,5,7 public class Sushu { public static void main(String[]args){ String str="2 3 5 7 "; for(int i=2;i<=100;i++){ if(i%2==0||i%3==0||i%5==0||i%7==0 ){ //:逻辑判断,筛选 continue;

Java学习日记(一)基础

标识符: 由26个英文字母大小写,数字:0-9 符号:_ $ 组成 定义合法标识符规则: 1.数字不可以开头. 2.不可以使用关键字. 3.Java中严格区分大小写. Java中的注释格式: 单行注释: 格式: //注释文字 多行注释: 格式: /* 注释文字*/ 文档注释: 格式:/** 注释文字 */ 常量: 常量表示不能改变的数值. java中常量的分类: 1.整数常量.所有整数 2.小数常量.所有小数 3.布尔型常量.较为特有,只有两个数值.true 和false. 4.字符常量.将一个

java学习笔记 第二篇 核心技术(二)

第十四章 集合类 集合类用来存放对象的引用.继承关系如下图: 14.1 Collection 接口 是层次结构中的根接口,构成Collection的单位称为元素.Collection接口不能直接使用,但该接口提供了添加元素.删除元素.管理数据的方法. Collection接口常用方法: 14.2 List 集合 包括List接口以及List集合的所有实现类.List集合中的元素允许重复,各元素循序就是对象插入的顺序 1.List接口,两个重要方法: get(int index): 获取指定索引位