第五节:详细讲解Java中的接口与继承
前言
大家好,给大家带来详细讲解Java中的接口与继承
的概述,希望你们喜欢
什么是接口(interface)
接口中的方法都是抽象方法,public权限,全是抽象函数,不能生成对象
interface Student{
public void read();
public void write();
}
class ChineseStudent implements Student{
//复写
public void read(){
System.out.println("read");
}
public void write(){
System.out.println("write");
}
}
class Test{
public static void main(String args[]){
ChineseStudent chinesestudent = new ChineseStudent();
Student student = chinesestudent;
student.read();
student.write();
}
}
实现接口用implements关键字,
一个接口可以实现多个接口,
一个接口可以继承多个接口
interface Student{
public void read();
public void write();
}
interface Teacher{
public void teach();
public void test();
}
class Person implements Student,Teacher{
public void read(){
System.out.println("read"):
}
public void write(){
System.out.println("write");
}
public void teach(){
System.out.println("teach"):
}
public void test(){
System.out.println("test"):
}
}
class Test{
public static void main(String args[]){
Person person = new Person();
Student student = person;
student.read();
student.write();
Teacher teacher = person;
teacher.teach();
teacher.close();
}
}
swith( char byte short int)只允许四种类型
public class Test{
public static void main(String args[]){
int score = 90;
if(score > 85 && score <= 100){
System.out.println("成绩为优");
}
else if(score > 75 && score <= 85){
System.out.println("成绩为良");
}
else if(score > 60 && score <= 75){
System.out.println("成绩为中");
}
else if(score <= 60 && score >= 0){
System.out.println("成绩为差");
}
else if(score > 100 || score < 0){
System.out.println("成绩不在正常的范围之内");
}
}
}
对象就是引用数据类型
class Test{
public static void main(String args[]){
Dog d = new Dog();
d.name="哈哈";
d.age=2;
d.jump();
System.out.println("名字是"+d.name);
}
}
重载的表达
class A{
void funA(){
System.out.println("没有参数的funA函数");
}
void funA(int i){
System.out.println("有参数的funA函数");
}
void funA(int i,double d){
System.out.println("拥有两个参数的funA函数");
}
}
什么是继承
在现实世界当中,继承就是儿子得到老子的东西,在面向对象的世界当中,继承就是一个类得到了另一个类当中的成员变量和成员方法
Java只支持单继承,不允许多继承,继承是为了减少重复代码
使用super调用父类构造函数的方法
class Person{
String name;
int age;
Person(){
System.out.prinltn("Person的无参数构造函数");
}
Person(String name,int age){
this.name=name;
this.age=age;
System.out.println("Person有参数的构造函数");
}
void eat(){
System.out.println("定义吃饭的方法");
}
}
class Student extends Person{
//子类继承父类
Student(){
//父类
super();
System.out.println("Student的无参数构造函数");
}
Student(String name,int age,int id){
super(name,age);
this.id=id;
}
}
在Java中的继承,其实就是继承全部属性和方法(除了构造方法),除了private修饰的变量或者方法,子类无法进行访问
什么是复写
具有父子关系的两个类中,父类和子类各有一个函数,这两个函数的定义(返回值类型,函数名,参数列表)完全相同
对象的转型(多态性地体现)
父类引用指向子类对象,同一个类型,调用同一个方法,却能呈现不同的状态
- 什么是向上转型:
向上转型就是将子类的对象赋值给父类的引用。 - 什么是向下转型:
向下转型就是将父类的对象赋值给子类的引用。
Student s1 = new Student();
Person p = s1;
Student s2 = (Student)p;
类的多态
- 父类引用指向子类对象
- 调用的方法有重写
所谓的转型
- 类型转换指:
把一个引用所指向的对象的类型,转换为另一个引用的类型 - 没有继承关系的类型进行转换,一定会失败
了解Object类
- Object类是所有类的父类
- Object类提供一个toString方法,返回当前对象的字符串表达
- equals() 判断两个对象的内容是否相同
详解final
- final可以修饰类(该类不能够被继承),成员变量(修饰基本类型变量,该变量只有一次赋值机会,修饰引用,该引用只有一次指向对象的机会),成员方法(不能够被重写)
- String类是public final class String,不能被继承
什么是抽象函数
没有函数体的函数被称为抽象函数
什么是抽象类
使用abstract定义的类称为抽象类
- 抽象类不能够生成对象
- 抽象类不能实例化,继承抽象类,那么该类必须为抽象类
- 一个类被声明为抽象类,不能够被直接实例化
abstract class Person{
abstract void eat();
}
class Chinese extends Person{
void eat(){
System.out.pritln("hhh");
}
}
class Test{
public static void main(String args[]){
Person p = new Chinese();
p.eat();
}
}
abstract class Person{
Person(){
System.out.println("Person没有参数的构造函数");
}
Person(String name,String age){
this.name=name;
this.age=age;
}
String name;
int age;
void introduce(){
System.out.println("我的名字是"+name+",我的年龄是"+age);
}
abstract void eat();
}
}
class Chinese extends Person{
String address;
Chinese(){
super();
System.out.println("Chinese的构造函数");
}
Chinese(String name,int age,String address){
super(name,age);
this.address=address;
}
void eat(){
//复写
System.out.println("吃饭");
}
}
class Test{
public static void main(String args[]){
Person p = new Chinese();
p.eat();
}
}
如何生成内部类的对象
class Test{
public static void main(String args[]){
A a = new A();
A.B b = new A().new B();
//或者A.B b = a.new B();
}
}
class A{
int i;
class B{
int j;
int funB(){
int result = i+j;
return result;
}
}
}
class Test{
public static void main(String args[]){
A a = new A();
A.B b = a.new B();
a.i=3;
a.j=1;
int result = b.funB();
System.out.println(result);
}
}
class A{
int i;
class B{
int j;
int funB(){
int result = A.this.i+this.j;
return result;
}
}
}
内部类
内部类有 非静态,静态,匿名类
语法: new 外部类().new 内部类()
匿名内部类
interfacce A{
public void doSomething();
}
class B{
public void fun(A a){
System.out.println("B函数");
a.doSomething();
}
}
class Work implements A{
public void doSomething(){
System.out.println("doSomething");
}
}
class Test{
public static void main(String args[]){
Work work = new Work();
A a = work;
B b = new B();
b.fun(a);
}
}
class Test{
public static void main(String args[]){
B b = new B();
b.fun(new A(){
public void doSomething(){
System.out.println("匿名内部类");
}
});
}
}
总结
- 本文讲了详细讲解Java中的接口与继承,如果您还有更好地理解,欢迎沟通
- 定位:分享
Android
&Java
知识点,有兴趣可以继续关注
第五节:详细讲解Java中的接口与继承的更多相关文章
- 第四节:详细讲解Java中的类和面向对象思想
前言 大家好,给大家带来详细讲解Java中的类和面向对象思想的概述,希望你们喜欢 类和面向对象 在Java中怎样理解对象,创建对象和引用:什么是引用,对于基础学习的同学,要深入了解引用.示例:Stri ...
- 第九节:详细讲解Java中的泛型,多线程,网络编程
前言 大家好,给大家带来详细讲解Java中的泛型,多线程,网络编程的概述,希望你们喜欢 泛型 泛型格式:ArrayList list= new ArrayList(); ArrayList list= ...
- 第七节:详细讲解Java中的日期,java.util.date
前言 大家好,给大家带来详细讲解Java中的日期,java.util.date的概述,希望你们喜欢 类Date Java.lang.Object->java.util.Date public c ...
- 第六节:详细讲解Java中的装箱与拆箱及其字符串
前言 大家好,给大家带来详细讲解Java中的装箱与拆箱及其字符串的概述,希望你们喜欢 装箱与拆箱 封装类有:Byte , short , Integer , Character , long , Fl ...
- 第八节:详细讲解Java中的异常处理情况与I/O流的介绍以及类集合框架
前言 大家好,给大家带来详细讲解Java中的异常处理情况与I/O流的介绍以及类集合框架的概述,希望你们喜欢 JAVA 异常 try...catch...finally结构的使用方法 class Tes ...
- 详细讲解Java中方法的重载和重写
首先讲讲方法的重载: Java的重载就是在类中可以创建多个方法,它们具有相同的名字,但是却有不同的参数. 判断是否重载只有两个条件: 1)相同的方法名 2)不同的参数 具体为: A.方法参数类型不同 ...
- java中的接口与继承,接口的例子讲解
extends 继承类:implements 实现接口. 简单说: 1.extends是继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承, 2.JAVA中不支持多重继 ...
- 【转】详细讲解Java中log4j的使用方法
转载地址:http://www.233.com/Java/zhuangye/20070731/142625631.html 1.Log4j是什么? Log4j可以帮助调试(有时候debug是发挥不了作 ...
- 详细讲解JAVA中的IO流
一.流的概念 流(stream)的概念源于UNIX中管道(pipe)的概念.在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备.外部文件等. ...
随机推荐
- C# 使用运算符重载 简化结果判断
执行某个方法后, 一般都要对执行结果判断, 如果执行不成功, 还需要显示错误信息, 我先后使用了下面几种方式 /// <summary> /// 返回int类型结果, msg输出错误信息 ...
- python对mysql数据库的一些常用操作
import pymysql class OperationDatabase(): def __init__(self,Ip,User,PassWd,DBname): self.ip=Ip self. ...
- win10在Pycharm中安装scrapy
查看官网说明 发现推荐是安装Anaconda 或 Miniconda,这东西有点大而全,感觉目前用不上.所以没这样做. 直接安装scrapy 如果直接装会报错的,参考文章就可以解决. 这里记一下组件下 ...
- PCL-CMAKELIST书写格式
cmake_minimum_required(VERSION 2.6 FATAL_ERROR)//cmake最小版本 find_package(PCL 1.3 REQUIRED COMPONENTS ...
- Minieye杯第十五届华中科技大学程序设计邀请赛现场同步赛 I Matrix Again
Minieye杯第十五届华中科技大学程序设计邀请赛现场同步赛 I Matrix Again https://ac.nowcoder.com/acm/contest/700/I 时间限制:C/C++ 1 ...
- (23)The surprising connection between brain injuries and crime
https://www.ted.com/talks/kim_gorgens_the_surprising_connection_between_brain_injuries_and_crime/tra ...
- 数据结构C语言顺序表
#include <stdio.h> #include <stdlib.h> typedef int EmenType; typedef struct Node { int d ...
- 如何理解Unity组件化开发模式
Unity的开发模式核心:节点和组件,组件可以加载到任何节点上,每个组件都有 gameobject 属性,可以通过这个属性获取到该节点,即游戏物体. 也就是说游戏物体由节点和组件构成,每个组件表示物体 ...
- Note | Git
目录 1. 出发 A. 安装 B. 设置机器身份 C. 创建版本(仓)库 repository D. 可管理文件 2. 基础操作 A. 添加文件至仓库 B. 修改文件并查看修改 C. 查看历史变动 D ...
- JavaGC学习笔记
1.简介Java在JVM虚拟机上的垃圾回收(GC)机制,在合适的时间触发垃圾回收,将不需要的内存空间回收释放,避免无限制的内存增长导致的OOM. 1.1 Java堆内存结构Java将堆内存分为3大部分 ...