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其他 ...
随机推荐
- 如何在家自制LED灯?很简单,我来告诉你!
首先LED分凸头.平头和凹头,当中的凹头是没无方向性. 做示宽灯这类晚间才运用的光源,用凹头就好,它没无方向性,可将整个反光碗照亮. 做转向灯等指示性的光源用,准绳上应该用凸头的,它是个聚光镜,投映的 ...
- 最新的极光推送服务器端代码(java服务器后台向手机端自定义推送消息)
一共两个类 一个Jdpush 一个JpushClientUtil 代码如下 注解都写的很清楚 package com.sm.common.ajpush; import org.slf4j.Log ...
- 从浅入深剖析angular表单验证
最近手上维护的组件剩下的BUG都是表单验证,而且公司的表单验证那块代码经历的几代人,里面的逻辑开始变得不清晰,而且代码结构不是很angular. 是很有必要深入了解表单验证. 入门之前,我觉得应该先了 ...
- Hibernate错误:Exception in thread "main" org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update
报错:Exception in thread "main" org.hibernate.exception.SQLGrammarException: Could not execu ...
- JProfiler - Java的性能监控工具
简介 JProfiler是一款Java的性能监控工具.可以查看当前应用的对象.对象引用.内存.CPU使用情况.线程.线程运行情况(阻塞.等待等),同时可以查找应用内存使用得热点,即:哪个对象占用的内存 ...
- PowerShell 远程执行任务
在 linux 中我们可以使用 SSH 执行各种远程操作,同样的在 windows 平台上我们可以通过 PowerShell 获得类似的能力.本文将介绍通过 PowerShell 执行远程操作的基本信 ...
- LoadRunner压力测试之Unique Number参数类型、Random Number参数类型浅析
前几天工作需要用LoadRunner进行压力测试,期间对手机号进行参数化设置. 当时选用了<Value>137{Random_quhao}{Unique_weiyi}</Value& ...
- JavaScript中的设计模式:单例模式
定义 单例模式就是一个类只能实例化一个对象,并且提供了一个访问它的全局访问点. 一般在实现登陆框,或者一个全局的控制器都会用到单例模式.现实中有window对象,线程池,全局缓存等. 简单实现 var ...
- 第一个asp.net实例——生日邀请以及回函
22回校后,看了论文游了西湖,今天开始接触asp.net,从图书馆选了两本书:<精通ASP.NET 4.5 (第五版)>,<ASP.NET全能速查手册>.一本练手细看,一本翻查 ...
- 【JAVASCRIPT】React学习- 杂七杂八
摘要 记录 React 学习中的小细节 setState setState 有一定的时间延迟,如果需要保证 setState 之后执行某些动作,可以采用以下方法 this.setState({ vis ...