接口

接口中成员修饰符是固定的:

成员常量:public static final 成员函数:public abstract

通过接口间接实现了多重继承

接口的特点

接口是对外暴露的规则 接口是程序的工功能扩展 接口的出现降低耦合性 接口可以用来多实现 类与接口之间是实现关系,而且类可以继承一个类的同时实现多个接口 接口与接口之间可以有继承关系

接口与抽象类

抽象类体现继承关系,一个类只能单继承 接口体现实现关系,一个类可以多实现

抽象类中可以定义非抽象方法,供子类直接使用 接口的方法都是抽象,接口中的成员都有固定修饰符

一个简单的实现例子:

package study_java.ex7;

public class InterfaceDemo1 {
public static void main(String[] args){
PC pc = new PC();
Mouse m = new Mouse();
Iphone ip = new Iphone();
pc.insertUSB(m);
pc.insertUSB(ip);
}
} // 定义接口
interface USB{
void connect();
} // 类实现了接口
class Mouse implements USB{
public void connect(){
System.out.println("我是鼠标");
}
} class Iphone implements USB{
public void connect(){
System.out.println("我是Iphone");
}
} class PC {
public void insertUSB(USB usb){
System.out.println("插入了usb设备");
usb.connect();
}
}

如果有多个接口,并且接口存在继承的时候,代码例子如下:

package study_java.ex7;

public class InterfaceDemo2 {
public static void main(String[] args){
TuHao th = new TuHao();
WomanStar ws = new WomanStar();
th.marry(ws);
}
} interface White{
public void white();
} interface Rich{
public void rich();
} interface Beautiful{
public void beautiful();
} interface BFM extends White,Rich,Beautiful{ } class WomanStar implements BFM{
public void white(){
System.out.println("我很白");
}
public void rich(){
System.out.println("我很有钱");
}
public void beautiful(){
System.out.println("我很有漂亮");
}
} class TuHao{
public void marry(BFM bfm){
bfm.white();
bfm.rich();
bfm.beautiful();
}
}

多态

定义:某一类事物的多种存在形态

多态的特点:

成员函数 编译时:要查看引用变量所属类中是否有所调用的成员

在运行时:要查看对象所属类是否有所调用的成员 成员变量 只看引用变量所属的类

关于多态的一个代码例子:

package study_java.ex7;

public class MutilstateDemo1 {
public static void main(String[] args){
Jing8 jing8 = new Jing8();
jing8.meng();
jing8.cry(); Dog dog = new Jing8();
dog.cry();
dog.watch(); Animal a = dog;
a.cry(); Pet pet = (Pet) a;
pet.meng(); }
} abstract class Animal{
public void cry(){
System.out.println("crying...");
}
} class Dog extends Animal{
public void watch(){
System.out.println("来人了");
}
} class Jing8 extends Dog implements Pet{
public void meng(){
System.out.println("么么哒");
}
} interface Pet{
void meng();
}

继承中方法可以被覆盖,但是成员变量不能被覆盖

代码例子:

package study_java.ex7;

public class MultiStatDemo2 {
public static void main(String[] args){
Jing8 j = new Jing8();
j.cry(); Dog dog = j;
dog.cry();
System.out.println(j.name);
System.out.println(dog.name);
}
} abstract class Animal{
abstract public void cry();
} class Dog extends Animal{
public String name = "大黄";
public void cry(){
System.out.println("旺旺");
}
} class Jing8 extends Dog{
public String name = "小黄";
public void cry(){
System.out.println("嘿嘿");
}
}

异常

异常的体系: Throwable: Error:通常出现重大问题如:运行的类不存在或者内存溢出,不编写代码针对处理 Exception:运行时出现的一些情况,可以通过try catch finally

Exception 和Error的子类名都是以父类名作为后缀的

Trowable中的方法

getMessage():获取异常信息,返回字符串

toString():获取异常信息和异常类名,返回字符串

printStackTrace():获取异常类名和异常信息,以及异常出现在程序中的位置,返回值void

printStackTrace(printStram s):通常用该方法将异常内容保存在日志文件中

throws和throw

throws用于标识函数暴露出的异常 throw用于抛出异常对象 throws和throw的区别: throws用在函数上,后面跟异常类名,声明抛出异常时使用的关键字 throw用在函数内,后面跟异常对象,抛出异常的语句

异常处理

try { 需要检测的代码 } catch { 异常处理代码 } finally { 一定会执行的代码 }

Finally代码只有一种情况不会被执行,就是在之前执行了System.exit(0)

package study_java.ex8;

public class ThrowableDemo1 {
public static void main(String[] args){
float r = divide(4,0);
System.out.println(r);
int[] arr = null;
int[] arr2 = new int[4];
// System.out.println(getLength(arr2));
System.out.println(getLength(arr));
} public static float divide(int a, int b){
return (float) a / b;
} public static int getLength(int[] arr){
int len = -1;
try {
len = arr.length;
}
catch (Exception e){
System.out.println("出错了"+ e.getMessage());
// return -2; 这里一般也不会加return
}
finally {
len += 1;
System.out.println("程序执行完了");
// return len; 这里一般不会加return
}
return len;
}
}

自定义异常

自定义类继承Exception或者其子类

通过构造函数定义异常信息

通过throw将自定义异常抛出

一个简单的例子:

package study_java.ex7;

public class ExceptionDemo1 {
public static void main(String[] args){
Person p = new Person();
try{
p.setAge(1000);
}
catch (Exception e){
((AgeTooBigException)e).printlnError();
} }
} class Person{
private int age;
public int getAge(){
return age;
} public void setAge(int age) throws AgeTooBigException {
if (age > 200) {
throw new AgeTooBigException();
}
this.age = age;
}
} class AgeTooBigException extends Exception{
private String info;
public AgeTooBigException(String info){
this.info=info;
}
public AgeTooBigException(){
this("年龄太大了");
}
public void printlnError(){
System.out.println(info);
}
}

一个稍微复杂的例子:

package study_java.ex7;

public class ExceptionDemo1 {
public static void main(String[] args){
Person p = new Person();
try{
p.setAge(-10);
}
catch (AgeTooBigException e){
e.printlnError();
}
catch (AgeTooSmallException e){
e.printlnError();
}
catch (AgeInvalidException e){
e.printlnError();
} }
} class Person{
private int age;
public int getAge(){
return age;
} public void setAge(int age) throws AgeTooBigException,
AgeTooSmallException,
AgeInvalidException {
if (age > 200) {
throw new AgeTooBigException();
}
else if (age <10 && age > 0){
throw new AgeTooSmallException();
}
else if (age < 0){
throw new AgeInvalidException("年龄非法");
}
else{
this.age = age;
} }
} // 年龄非法异常
class AgeInvalidException extends Exception{
private String info;
public AgeInvalidException(String info){
this.info = info;
}
public void printlnError(){
System.out.println(info);
}
} // 年龄太大异常
class AgeTooBigException extends AgeInvalidException{
public AgeTooBigException(String info){
super(info);
}
public AgeTooBigException(){
this("年龄太大了");
}
} // 年龄太小异常
class AgeTooSmallException extends AgeInvalidException{
public AgeTooSmallException(String info){
super(info);
}
public AgeTooSmallException(){
this("年龄太小了");
}
}

如果我们不处理异常而是直接抛出可以直接在man函数里抛出异常,这样就将异常抛给了java虚拟机

package study_java.ex8;

public class ExceptionDemo1 {
public static void main(String[] args) throws Exception {
Person p = new Person();
p.setAge(-10);
// 处理异常
/*
try{
p.setAge(2);
}
catch (AgeTooSmallException e){
e.printlnError();
}
catch (AgeTooBigException e){
e.printlnError();
}
catch (AgeInvalidException e){
e.printlnError();
}
*/
}
} class Person{
private int age;
public int getAge(){
return age;
} public void setAge(int age) throws AgeTooBigException,
AgeTooSmallException,
AgeInvalidException{
if (age> 200){
throw new AgeTooBigException();
}
else if (age < 10 && age > 0){
throw new AgeTooSmallException();
}
else if (age < 0){
throw new AgeInvalidException("年龄不合法");
}
else {
this.age = age;
} }
} class AgeInvalidException extends Exception{
private String info; public AgeInvalidException(String info){
this.info = info;
} public void printlnError(){
System.out.println(info);
}
} class AgeTooBigException extends AgeInvalidException{
public AgeTooBigException(String info){
super(info);
}
public AgeTooBigException(){
this("年龄太大了");
}
} class AgeTooSmallException extends AgeInvalidException{
public AgeTooSmallException(String info){
super(info);
}
public AgeTooSmallException(){
this("年龄太小了");
}
}

关于异常处理的细节:

RuntimeException 以及其子类如果在函数中被throw抛出,可以不用再函数上声明抛出语句,也不是必须用try catch语句处理 一个方法被覆盖时,覆盖它的方法必须抛出相同的异常或者异常的子类 如果父类抛出多个异常,那么重写(覆盖)方法必须抛出那些异常的一个子集,不能抛出新的异常

CheckedException 待检异常,也就是非运行时异常,必须使用try catch语句处理

包的概念

对类文件进行分类管理 给类提供多层命名空间 卸载程序文件的第一行 类名的全称的是包名.类名 包也是一种封装方式

如: javac -d classes PackageDemo1.java 编译java源文件,制定存放目录 java -cp classes com.zhaofan.java.PackageDemo1 运行程序,类全限定名

包之间的访问: 被访问的包中的类权限必须是public 类中的成员权限:public 或者protected protected是为其他包中的子类提供的一种权限

如果一个类是public 文件名必须是类名

这里顺便整理一下常见的几种权限在java中:

import导入

一个程序文件中只有一个package,可以有多个import 用来导包的类,不导入包中的包

小结:

private 私有的不能继承

public

protected 受保护的,针对其他包中的子类

default 默认,不写,不同包不能继承

Java基础(三)面向对象(下)的更多相关文章

  1. 【Java基础】面向对象下

    面向对象下 这一章主要涉及其他关键字,包括 this.super.static.final.abstract.interface.package.import 等. static 在 Java 类中, ...

  2. Java基础-初识面向对象编程(Object-Oriented-Programming)

    Java基础-初识面向对象编程(Object-Oriented-Programming) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Java是一门面向对象的程序设计语言.那么什 ...

  3. Java编程基础阶段笔记 day04 Java基础语法(下)

    day04 Java基础语法 (下) 笔记Notes要点 switch-case语句注意 switch-case题目(switchTest5) 循环执行顺序 if-else 实现3个整数排序 Stri ...

  4. 28道java基础面试题-下

    28道java基础面试题下 15.Java语言如何进行异常处理,关键字:throws.throw.try.catch.finally分别如何使用? 答:Java通过面向对象的方法进行异常处理,把各种不 ...

  5. Java基础知识【下】( 转载)

    http://blog.csdn.net/silentbalanceyh/article/details/4608360 (最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没 ...

  6. 黑马程序员——【Java基础】——面向对象(二)异常机制、包(Package)

    ---------- android培训.java培训.期待与您交流! ---------- 一.异常机制 (一)异常概述 1.异常:就是程序在运行时出现不正常情况. 2.异常类:程序在运行时,出现的 ...

  7. Java基础篇(下)

    6.Java面向对象的三个特征与含义 三大特征是:继承.封装和多态. (1)继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继承父类的特征和行为,使得 ...

  8. Java 基础三、接口与内部类

    1.   在Java程序语言中,接口是对类的一种描述.例如Arrays类中sort方法声明可以对对象进行排序,但前提是对象所属的类必须实现Comparable接口. public interface ...

  9. java基础(三)之面向对象编程

    对象的创建方法 语法: class 类名{ 属性; 方法; } 生成对象的方法 类名 对象名 = new 类名(); Dog dog = new Dog(); 对象的使用方法1.对象.变量;2.对象. ...

  10. Java基础之面向对象以及其他概念

    一.基础知识:1.JVM.JRE和JDK的区别: JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性. java语言是跨平台,jvm不是跨平台的. JR ...

随机推荐

  1. 001.Redis简介及安装

    一 Redis简介 1.1 Redis 简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 与其他 key-value 缓存产品有以下三个特点: ...

  2. Mac终端下的svn使用教程

    1.将文件checkout到本地目录 1 svn checkout path(path是服务器上的目录) 2 例如:svn checkout svn://192.168.1.1/svn 3 简写:sv ...

  3. BZOJ.3811.玛里苟斯(线性基)

    BZOJ UOJ 感觉网上大部分题解对我这种数学基础差的人来说十分不友好...(虽然理解后也觉得没有那么难) 结合两篇写的比较好的详细写一写.如果有错要指出啊QAQ https://blog.csdn ...

  4. [JOISC2014]友だちをつくろう

    [JOISC2014]友だちをつくろう 题目大意: 一个\(n(n\le10^5)\)个点,\(m(m\le2\times10^5)\)条边的有向图.对于两个点\(i,j\),如果存在一个点\(k\) ...

  5. 解决IDEA Springboot项目sql文件打开提示No data sources are configured to run this SQL and provide advanced的问题

    Idea2018的Springboot项目,如果里面有.sql文件,打开后,会提示"No data sources are configured to run this SQL and pr ...

  6. Debian stretch更换国内源

    在debian图形化安装过程中就可以选择网络镜像的位置 据说电信用清华的源快,移动的用网易源快 备份源配置文件: cp /etc/apt/sources.list /etc/apt/sources.l ...

  7. BZOJ2167 : 公交车站

    设$f[i]$表示$i$往上通过一趟公交车能到达的深度最小的祖先,这可以通过将公交车按$lca$深度从小到大排序后用并查集染色得到. 对于每个询问: $1.x==y$ $ans=0$. $2.x$是$ ...

  8. 打开沙盒文件iOS

    有时使用数据库是需要查看或者更换沙盒里的数据库等文件 那么如何拿到真机的沙盒 查看真机沙盒教程 打开Devices 在xcode的上部导航栏里,选择window -> Devices and S ...

  9. Java 多线程 临界区

    临界区表示一种公共资源或共享数据,可以被多个线程使用.但是每一次只能有一个线程使用它.一旦临界区资源被占用,想使用该资源的其他线程必须等待. 例如,办公室里的打印机一次只能执行一个任务.当小王和小明同 ...

  10. 使用Logstash filter grok过滤日志文件

    Logstash提供了一系列filter过滤plugin来处理收集到的log event,根据log event的特征去切分所需要的字段,方便kibana做visualize和dashboard的da ...