Java入门——(3)面对对象(下)
class A{}
class B extends A{}
class A{}
class B{}
class C extends A,B{} //C类不可以同时继承A类和B类
①子类覆盖父类,必须保证权限要大于或等于父类的权限。
②静态覆盖静态。
③写法上必须一模一样,函数的返回值类型 函数名 参数列表都要一样。
3、super关键字
①如果子类的构造函数第一行写了this调用了背离其他构造函数,那么super调用父类的语句是没有的,因为this()或者super(),只能在构造函数的第一行,因为初始化动作要先执行。
②父类构造函数中是否有隐式的super呢?也是有的,只要是构造函数默认第一行都是super();
②只要使用父类的指定初始化动作,就在子类中通过super(参数列表)格式进行调用。
①使用super关键字调用父类的成员变量和成员方法。具体格式:
②使用super关键字调用父类的构造方法,具体格式:
①final修饰的类是一个最终类,该类将不能被继承,不能派生子类。
③final修饰的变量是一个常量,只能被赋值一个。
如:final int num = 2;
①抽象类和抽象方法都需要被abstract修饰。(抽象方法一定要定义在抽象类中)。
//定义抽象类Animal
abstract class Animal{
//定义抽象方法shuot()
abstract int shout ();
}
②抽象类不可以创建实例,原因:调用抽象方法没有方法体。
③只要覆盖了抽象类中所有的抽象方法后,其子类才可以实例化。否则该子类还是一个抽象类。
1 interface Animal{
2 int ID = 1; //定义全局变量
3 void breathe(); //定义抽象方法
4 void run ();
5 } // Animal 即为一个接口,接口中定义的的方法和变量都包含一些默认修饰符“public abstract”(抽象方法)“public static final”(全局变量)。
①接口可以创建对象;
②子类必须覆盖掉接口中所有的抽象方法后,子类才可以实例化。否则子类是一个抽象类。
③实现多接口示例:
interface Run{
程序代码…..
}
interface Fly{
程序代码…..
}
class Bird implements Run,Fly{
程序代码…….
}
class Dog extends Canidae implements Animal{ //先继承,再实现
程序代码……
}
1 //定义接口Animal
2 interface Animal{
3 void shout();
4 }
5 //定义Cat类实现Animal接口
6 class Cat implements Animal{
7 //实现shout()方法
8 public void shout(){
9 System.out.println("喵喵...");
10 }
11 }
12 //定义Dog类型实现Animal接口
13 class Dog implements Animal{
14 public void shout(){
15 System.out.println("汪汪");
16 }
17 }
18 //定义测试类
19 public class Example13 {
20 public static void main(String[] args) {
21 Animal an1 =new Cat();//创建Cat对象,使用Animal类型的变量an1引用
22 Animal an2 =new Dog();//创建Dog对象,使用Animal类型的变量an2引用
23 animalShout(an1); //调用animalShout()方法,将an1作为参数传入
24 animalShout(an2); //调用animalShout()方法,将an2作为参数传入
25 }
26 public static void animalShout(Animal an) {
27 an.shout();
28 }
29 }
运行结果
喵喵…
汪汪
Animal a = new Dog();
a.eat();
Dog d = (Dog)a; //将a转型为Dog 类型。向下转型。
d.lookHome();
if(a instanceof Cat){ //a指向的对象的类型是Cat类型。
//将a转型Cat 类型。
Cat c = (Cat)a;
c.catchMouse();
}else if(a instanceof Dog){
Dog d = (Dog) a;
d.lookHome();
}
1 interface Animal{
2 void shout();//定义抽象方法shout()
3 }
4 //定义Cat类实现Animal接口
5 class Cat implements Animal{
6 //实现抽象方法shout()
7 public void shout(){
8 System.out.println("喵喵...");
9 }
10 //定义sleep()方法
11 public void sleep(){
12 System.out.println("猫在睡觉.....");
13 }
14 }
15 //定义Dog类实现Animal接口
16 class Dog implements Animal{
17 //实现抽象方法shout()
18 public void shout(){
19 System.out.println("汪汪...");
20 }
21 }
22 //定义测试类
23 public class Example14 {
24 public static void main(String[] args) {
25 Animal dog = new Dog(); //创建Dog类的实例对象
26 animalShout(dog); //调用animalShout()方法,将dog作为参数传入
27 }
28 public static void animalShout(Animal animal) {
29 if (animal instanceof Cat) {
30 Cat cat = (Cat) animal;//将animal对象强制装换为Cat类型
31 cat.shout(); //调用cat的shout()方法
32 cat.sleep(); //调用cat的sleep()方法
33 }else{
34 System.out.println("this animal is not a cat!");
35 }
36 }
37 }
运行结果:
this animal is not a cat!
①什么时候向上转型?
②什么时候向下转型?
new 父类(参数列表)或父接口(){
// 匿名内部类实现部分
}
示例
1 interface Animal{
2 void shout();
3 }
4 public class Example18 {
5 public static void main(String[] args) {
6 animalShout(new Animal(){
7 public void shout() {
8 System.out.println("喵喵...");
9 }
10 });
11 }
12 public static void animalShout(Animal an) {
13 an.shout();
14 }
15 }
运行结果
喵喵...
1 class Animal{
2 /*//定义动物叫的方法
3 void shout(){
4 System.out.println("动物叫");
5 }*/
6 //重写Object类中的toString()方法
7
8 @Override
9 public String toString() {
10 return "I am an animal!";
11 }
12 }
13 //定义测试类
14 public class Example16 {
15 public static void main(String[] args) {
16 Animal animal = new Animal(); //创建Animal类对象
17 System.out.println(animal.toString()); //调用toString()方法并打印
18 }
19 }
五、异常
1、Throwable类的继承体系
运行时异常:RuntimeException类即其子类都是运行时异常,编译器不会检测的异常,不需要声明。
Throwable常用方法 | |
方法声明 | 功能描述 |
String getMessage() | 返回此throwable的详细消息字符串 |
void printStackTrace() | 将此throwable及其追踪输出至标准错误流 |
void printStackTrace(PrintStream s) | 将此throwable及其追踪输出至指定的输出流 |
try{
//需要被检测的语句
}catch(ExceptionType(Exception类及其子类) e) {
//ExceptionType的处理
}
finally{
//一定会被执行的语句
}
示例
1 public class Example20 {
2 public static void main(String[] args) {
3 // 下面的代码定义了一个try...catch语句用于捕捉异常
4 try {
5 int result = divide(4,0); //调用divide()方法
6 System.out.println(result);
7 } catch (Exception e) { //对异常进行处理
8 System.out.println("捕捉的异常信息为" + e.getMessage());
9 return; //用于结束当前语句
10 }finally {
11 System.out.println("进入finally代码块”);
12 }
13 System.out.println("程序继续向下执行...");
14 }
15 //下面的方法实现了两个整数相除
16 public static int divide(int x,int y) {
17 int result = x/y; //定义一个变量result记录两个整数相除的结果
18 return result; //将结果返回
19 }
20 }
运行结果
捕获的异常信息是:/by zero
进入代码块
在程序设计时,经常会在try...catch后使用finally代码块来完成必须做的事情,例如释放系统资源。需注意,当try...catch中执行了System.exit(0)语句,则退出Java虚拟机,任何代码都不能继续执行。
①try catch :对代码进行异常检测,并对检测的异常传递给catch处理。
Void show ()throws {//不需要throws
try{
throw new Exception();
}finally{
}
}
②try finally:对代码进行异常检测,检测到异常后因为没有catch,所以一样会被默认jvm抛出。
Void show () {//需要throws
try{
throw new Exception();
}finally{
}
}
③try catch finally
④try catch1 catch2 catch3………
void show ()throws Exception{
throw new Exception();
}
1 class DivideByMinusException extends Exception{
2 public DivideByMinusException(){
3 super();//调用Exception无参的构造方法
4 }
5 public DivideByMinusException(String message){
6 super(message);//调用Exception无参的构造方法
7 }
8 }
9 public class Example26 {
10 public static void main(String[] args) {
11 try{
12 int result = divide(4,-2);
13 System.out.println(result);
14 }catch (DivideByMinusException e){
15 System.out.println(e.getMessage());
16 }
17 }
18 public static int divide(int x,int y)throws DivideByMinusException{
19 if(y<0){
20 throw new DivideByMinusException("被除数是负数");
21 }
22 int result = x/y ;
23 return result;
24 }
25 }
import 包名.类名;
访问控制级别 |
||||
同一类中 |
同一包下 (有无关系均可) |
不同包下(子类) |
不同包下 (没有关系) |
|
private |
Y |
|||
default(默认) |
Y |
Y |
||
protected |
Y |
Y |
Y |
|
public |
Y |
Y |
Y |
Y |
Java入门——(3)面对对象(下)的更多相关文章
- Java入门——在Linux环境下安装JDK并配置环境变量
Java入门——在Linux环境下安装JDK并配置环境变量 摘要:本文主要说明在Linux环境下JDK的安装,以及安装完成之后环境变量的配置. 使用已下载的压缩包进行安装 下载并解压 在Java的官网 ...
- Java入门之:对象和类
Java对象和类 Java作为一种面向对象语言,支持以下基本概念: 多态 继承 封装 抽象 类 对象 实例 方法 重载 本节我们重点研究对象和类的概念: 对象: 对象是类的一个实例,有状态和行为.例如 ...
- Java学习笔记--面对对象OOP
面向对象编程 OOP 面向对象&面向过程 面向对象编程的本质:以类的方式组织代码,以对象的方法组织数据 面向对象编程的三大特征: 封装 继承 多态 方法 静态方法 通过 static 关键词说 ...
- JAVA程序设计(11)-----面对对象0基础设计 麻将 创建麻将牌 然后洗牌 发牌~ 恩 就这样
zzzzZZZZ 1.開始还想贴图的 实在太懒了-- 这是一张麻将 package com.lovo; import java.awt.Graphics; import java.awt.Image; ...
- JAVA入门 面向对象
主要内容 1.类和对象的概念 2.什么是面向对象 3.什么对象的属性方法 4.何谓对象引用 5.实例化 类和对象的概念 万物皆对象,客观存在的事物皆为对象.我们大到名胜古迹,小道生活中的一件物品,例如 ...
- Java学习——面对对象的思想入门
本文是看过<head first Java>之后的一点感悟,写点东西帮忙以后回忆,Java目前在我的工作中用到还不多,而我又对面对对象的编程非常的感兴趣.曾经在MFC平台上写过 ...
- Java入门——(2)面对对象(上)
关键词:面对对象.类..构造方法.this.static.内部类 一.面对对象的概念:把解决的问题安装一定规则划分为多个独立的对象,然后通过调用对象的方法来解决问题.其特点可概括为封装性.继承 ...
- Java入门记(五):容器关系的梳理(下)——Map
注意:阅读本文及相关源码时,需要数据结构相关知识,包括:哈希表.链表.红黑树. Map是将键(key)映射到值(value)的对象.不同的映射不能包含相同的键:每个键最多只能映射到一个值.下图是常见M ...
- Java入门篇(六)——类和对象
写到这里终于写到了入门篇的最后一个知识点了.类和对象是Java中经常被提到的两个词汇,实际上可以将类看作对象的载体,它定义了对象所具有的功能.Java是面向对象的语言,因此掌握类与对象是学习Java语 ...
- JAVA手记 JAVA入门(安装+Dos下运行)
JAVA入门特供= =,今天设置环境变量后用dos运行的时候发现出现“找不到或无法加载主类”,索性查了些资料重新看了看JAVA入门的部分. 声明:我的笔记本暂时用的是Win10系统,Windows其他 ...
随机推荐
- js或者jq的tab切换
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- 【SEO】搜索引擎优化的陷阱和作弊
一.认识SEO [理解] 站内优化是指更改网站内部结构,让网站利于蜘蛛爬取,比如网站内容: 站外优化是指发反向链接,给蜘蛛一个爬取你网站的通道. 其中,反向链接是指网页A 上有一个链接指向网页B,则网 ...
- Elasticsearch学习随笔(一)--原理理解与5.0核心插件部署过程
最近由于要涉及一些安全运维的工作,最近在研究Elasticsearch,为ELK做相关的准备.于是把自己学习的一些随笔分享给大家,进行学习,在部署常用插件的时候由于是5.0版本的Elasticsear ...
- peoplesoft function PSTREENODE 通过 deptid 获得部门树 一级部门 名称
create or replace function ht_gettopdeptNAME(deptid in varchar) return varchar2 is r ); c int; m ); ...
- gulp总结
安装 1.安装node 检测是否安装成功的方法,在命令行输入: node -v npm -v 显示版本号则安装成功 2.装cnmp一定要网络好一点 npm install cnpm -g --regi ...
- 《JavaScript高级程序设计》 -- 变量、作用域和内存问题(二)
1.基本类型与引用类型 基本类型:值保存在变量中 (Number.String.Boolean.Undefined.Null).在内存中占据固定大小空间,被保存在栈内存中 引用类型:值是保存在内存中的 ...
- 微信小程序+OLAMI(欧拉蜜)自然语言API接口制作智能查询工具--快递、聊天、日历等
微信小程序最近比较热门,再加上自然语义理解也越来越被人关注,于是我想赶赶潮流,做一个小程序试试.想来想去快递查询应该是一种比较普遍的需求. 如果你也在通过自然语言接口做点什么,希望我的这篇博客能帮到你 ...
- Java之面向对象概述,类,构造方法,static,主方法,对象
一.面向对象概述 面向过程 "面向过程"(Procedure Oriented)是一种以过程为中心的编程思想.这些都是以什么正在发生为主要目标进行编程,不同于面向对象的是谁在受影响 ...
- 一步一步学Vue(四)
接上篇.上篇中给出了代码框架,没有具体实现,这一篇会对上篇定义的几个组件进行分别介绍和完善: 1.TodoContainer组件 TodoContainer组件,用来组织其它组件,这是react中推荐 ...
- Result Maps collection does not contain value for...
出现上述错误 主要是因为你的select标签内部的resultMap属性指向的不正确 在sql文件中只要有一个resultMap或resultType属性指向错误,则在这个文件中其余正确的语句也不能执 ...