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其他 ...
随机推荐
- Web office apps 安装部署
系统要求为Windows Server 2012, 注意:安装Office Web Apps的服务器除了Office Web Apps之外,不能安装其他应用.包括不能安装Office,lync,,sh ...
- HDU 1051 Wooden Sticks 贪心||DP
Wooden Sticks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- Hessian服务端和客户端示例
一.服务端 1.创建web项目,建立客户端调用的hessian接口和实现类. 接口: package com.ymx.hessian.service; import com.ymx.hessian.s ...
- DOM0级事件处理、DOM2级事件处理
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- python cookbook第三版学习笔记十二:类和对象(三)创建新的类或实例属性
先介绍几个类中的应用__getattr__,__setattr__,__get__,__set__,__getattribute__,. __getattr__:当在类中找不到attribute的时候 ...
- JavaScript中异步编程
一 关于事件的异步 事件是JavaScript中最重要的一个特征,nodejs就是利用js这一异步而设计出来的.所以这里讲一下事件机制. 在一个js文件中,如果要运行某一个函数,有2中手段,一个就是直 ...
- 玲珑杯 Round #11 (1001 1004 1007)
比赛链接 直接贴代码.. #include<bits/stdc++.h> using namespace std; typedef long long LL; int main() { L ...
- ABAP,学习不一样的EXCEL导出----XLSX Workbench
这个工具是在查找ABAP导出EXCEL资料的时候发现,是国外的一位大牛自己开发的开源项目,体验了一番,确实很好用. 工具特点: No ABAP Programming Skills are requi ...
- 怎么去掉javascript 的Array的重复项
//完美去除法: var arr=[1,3,2,2,11,4]; var arr1=[]; var arr2=arr.sort(function(a,b){ return a-b; }); //把数组 ...
- HDOJ-2006求奇数的乘积
Problem Description 给你n个整数,求他们中所有奇数的乘积. Input 输入数据包含多个测试实例,每个测试实例占一行,每行的第一个数为n,表示本组数据一共有n个,接着是n个整数 ...