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其他 ...
随机推荐
- Hibernate基础知识总结
Hibernate是JDBC的轻量级的对象封装(encapsulation),它是一个独立的对象持久persistence层框架. hibernate要做的事,就是让对象投影到关系数据库中,然后实施化 ...
- js实现类似iphone的秒表-添加平均数功能
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- 词向量-LRWE模型
上一节,我们介绍利用文本和知识库融合训练词向量的方法,如何更好的融合这些结构化知识呢?使得训练得到的词向量更具有泛化能力,能有效识别同义词反义词,又能学习到上下文信息还有不同级别的语义信息. 基于上述 ...
- Vijos 1033 整数分解(版本2)
描述 整数分解(版本2) 一个正整数可以分解成若干个自然数之和.请你编一个程序,对于给出的一个正整数n(1<=n<=1500),求出满足要求的分解方案,并使这些自然数的乘积m达到最大. 例 ...
- ExtJs2.0里Ext.form.Radio水平排列布局
ExtJs2.0好像不支持单选框组,因此用两个name相同单选框来实现单选框组 var radio1 = new Ext.form.Radio({boxLabel:'男',name:'sex',i ...
- Linux程序设计之shell程序设计
看了<linux程序设计(第4版)>(作者:Neil Matthew ,Richard Stones ,陈建 ,宋健建译).做个笔记,以备后面查看. 首先,清楚几个概念. shell编程属 ...
- php七牛批量删除空间内的所有文件方法
相信大家都在使用七牛的免费云存储服务的同时,有清空七牛云存储镜像文件或者批量删除七牛云空间文件的需求,该怎么做?官方的工具好像并没有提供批量删除的功能,七牛云官方给出的建议是删除空间,再新建一个这样太 ...
- JavaWeb 后端 <九> 之 JDBC加强
一.大结果集的分页(重点,难点) 1.分批次查询:分页 2.基于数据库的分页:依赖的是数据库的分页语句(不同数据库是不同的) MySQL:每页显示10条. select * from XXX limi ...
- Java 数据库编程 ResultSet 的 使用方法
结果集(ResultSet)是数据中查询结果返回的一种对象,可以说结果集是一个存储查询结果的对象,但是结果集并不仅仅具有存储的功能,他同时还具有操纵数据的功能,可能完成对数据的更新等. 结果集读取数据 ...
- CentOS 6.9上安装mysql-5.6.36
CentOS 6.9上安装mysql-5.6.36 1.准备数据存放的文件系统 新建一个逻辑卷,并将其挂载至特定目录即可.这里不再给出过程. 这里假设其逻辑卷的挂载目录为/data,而后需要创建/da ...