Java Study For Seven Day( 面向对象三)
继承

class Person
{
String name;
int age;
}
class Student extends Person
{ void study()
{
System.out.println("good study");
}
}
class Worker extends Person
{
void work()
{
System.out.println("good work");
}
}
class ExtendsDemo
{
public static void main(String[] args)
{ }
}

1.把很多的类的相同的特征和行为进行抽取,用一个类来描述。让多个类和这个类产生一个关系
这样的话多个类可以省略很多的代码,这个关系就是继承,Java中关键字extends来表示。
2.继承的体系结构
A.多个具体的对象,不断的向上抽取共享的内容,最终形成了一个体系,叫做继承体系。
B.继承体系的学习和原则
学习顶层的内容。原因是它是体系的共性内容
创建子类使用。也就是使用底层的具体对象
3.继承的特点
Java中只能是单继承,没有多继承这一说法。
Java中可以多层(重)继承
4.继承的好处
继承的出现提高了代码的复用性
继承让类与类之间产生了关系,是多态的前提条件
5.子父类中的成员间的关系
A.成员变量
在子类中方法中使用一个变量时,首先,在方法的局部变量中找这个变量,有则使用
否则,在本类中找成员变量,有则使用,否则,在父类中找成员变量,有则使用,否则报错。
B.成员方法
用子类对象使用方法时,首先,在子类中找这个方法,有则使用,否则,在父类中
找这个方法,有则使用,否则报错。
重写和重载的区别
重载:在同一个类中,方法名相同但是参数的列表不同,并且返回类型不能作为判断的依据
重写:在不同类中(子父类中),方法声明(返回类型、方法名称、参数列表都要一致)。
重写需要注意:
子类方法的访问权限要大于等于父类方法的访问权限
静态只能重写静态的,一般不会出现
构造方法
子列实例化过程
子类创建对象时,会先去创建父类的的对象,默认是去调用父类的五参构造方法
注意:子类构造方法中,默认第一行是super,原因是因为它继承父类的成员使用,使用前
这些成员必须初始化,因而,会先创建一个父类的对象,所以当父类没有无参构造函数时,必须使用this或是super
调用其它的构造函数。
6.this和super的区别
this代表是本类的对象的引用,而super代表的是父类的存储空间

class Fu
{
private int num =4;
void sperk()
{
System.out.println("vb");
}
}
class Zi extends Fu
{
int num =5;
void show()
{
System.out.println(super.num);
}
void speak()
{
System.out.println("java");
}
} class ExtendsDemo1
{
public static void main(String[] args)
{
Zi zi = new Zi();//new一对象加载子类.class文件前先加载父类.class文件
System.out.println(zi.num+"..."+zi.num);
zi.show();
}
} class Tel
{
void show()
{
System.out.println("number"); }
}
class NewTel extends Tel
{
void show()
{
System.out.println("name")
//System.out.println("number");
super.show();
System.out.println("picture");
}
}

final关键字
1.最终的意思,可以用于修饰类、方法、变量
2.final修饰的类不能继承,修饰的方法不能重写、修饰的变量是一个常量,只能被赋值一次
内部类只能访问被final修饰的局部变量。

class Demo
{
public static final int x =3;//全局常量。
final void show1()
{
final int y =4;//
y = 4;//会挂 进行了第二次赋值 final double pai =3.14;//给3.14这个数据起个名字,方便阅读 }
void show2(){} }
class SubDemo extends Demo
{
void show1(){}
}
class FinalDemo
{
public static void main(String[] args)
{ }
}

抽象类
1.多个类有相同的方法声明,但是方法体不一样,此时可以考虑把方法声明进行抽取,让子类继承后去
实现方法体,没有方法体,从而需要用抽象标志下,关键字是abstract
2.抽象类
该方法称为抽象方法,包含抽象方法的类就是抽象类
3.抽象类的特点
抽象类和抽象方法都要用abstract进行修饰
抽象类不能被实例化
抽象类中不一定有抽象方法,但是有抽象方法的类一定是抽象类
4.抽象类中的数据特点
成员变量
抽象类中可以有常量,也可以有变量
成员方法
抽象类中可以有抽象方法,也可以有非抽象方法
构造函数
抽象类是一个类,所有有构造函数,但是本身不能实例化,但是可以给子类实例化使用
5.抽象类中的问题
A.抽象类中有构造函数不能被实例化但是可以供子类实例化
B.抽象关键字abstract不可以和那些关键字共存?
私有的内容 继承不到,所以不能重写但是abstract修饰的方法要求被重写所以冲突
final修饰的方法不能被重写也冲突,static假如一个抽象方法能通过static修饰,那么这个方法,就可以直接通过类名调用。而抽象方法是没有方法体的,这样的调用无意义。所以,不能用static修饰。
C.抽象类中可不可以没有抽象方法?
抽象类中没有抽象方法的作用,只是为了不让别的类建立该抽象类对象。这个在awt中有体现。

class Demo
{
public static final int x =3;//全局常量。
final void show1()
{
final int y =4;//
y = 4;//会挂 进行了第二次赋值 final double pai =3.14;//给3.14这个数据起个名字,方便阅读 }
void show2(){} }
class SubDemo extends Demo
{
void show1(){}
}
class FinalDemo
{
public static void main(String[] args)
{ }
}
*抽象类练习 class
{
}
class Employee
{
private String name;
private String id;
private double pay;
Employee(String name,String id,double pay)
{
this.name = name;
this.id = id;
this.pay = pay;
}
public abstract void work(); }
class Manage extends Employee
{
private int bonus;
Manager(String name,String id,double pay,int bonus)
{
super(name,id,pay);
this.bonus = bonus;
}
public void work()
{
System.out.println("manage work");
}
}
class Pro extends Employee
{
Pro(String name,String id,double pay)
{
super(name,id,pay);
}
public void work()
{
System.out.println("pro work");
}
}
class
{
public static void main(String[] args)
{ }
}

接口interface
1.当一个类中的方法都是抽象的时候,那么Java中提供了另一种表示方式,称为接口,用interface
关键字表示,而类与接口之间关系用关键字implements实现表示

interface Inter
{
public static final int NUM = 3;
public abstract void show(); }
interface InterA
{
public abstract void method();
}
class Demo
{
public void function(){}
}
class Test extends Demo implements Inter,InterA
{
public void show(){}
public void method(){} }
interface A
{
void methodA(); }
interface B// extends A
{
void methodB(); }
interface C extends B,A
{
void methodC();
}
class D implements C
{
public void methodA(){}
public void methodB(){}
public void methodC(){} } class InterfaceDemo
{
public static void main(String[] args)
{
Test t = new Test();
System.out.println(t.NUM);
System.out.println(Test.NUM);
System.out.println(Inter.NUM);
}
}

2.接口的成员特点
成员变量
是常量,默认是public static final
成员方法
都是抽象的,默认是public abstract
3.关系
类与类的关系
是继承关系,类与类只能单继承,可以多重继承。
类与接口的关系
是实现的关系,类可以多啊、实现接口,类继承一个类的同时,可以实现多个接口。
接口和接口的关系
是继承关系,接口可以多继承接口。
4.接口的特点
对外暴露规则,是扩展功能,接口的出现降低了耦合性(类与类之间的关系)
5.接口和抽象类的区别
抽象类只能是单继承,接口可以多实现,接口避免了多继承的局限性
抽象类中的数据特点:
成员变量:可以是变量,也可以是常量
成员方法:可以是抽象方法,也可以是非抽象方法
构造方法:有构造方法
接口的数据特点
成员变量:是常量public static final
成员方法:都是抽象方法。都有默认修饰 public abstract
构造方法:没有构造方法
抽象类中定义的是继承体系的共性功能而接口中定义的是继承体系中的扩展的功能
抽象类被继承是is a 关系:某某是某某的一中而接口被实现是like a 关系:某某像某某一种

abstract class Student
{
abstract void study();
void sleep()
{
System.out.println("sleep");
} }
interface Drinking
{
void drink();
}
interface Smoking
{
void smoke();
}
class ZhangSan extends Student implements Smoking,Drinking
{
void study(){}
public void smoke(){}
public void drink(){}
}
class LiSi extends Student
{
void study(){}
}
class InterfaceTest
{
public static void main(String[] args)
{ }
}
class Sporter
{
void play();
}
interface Study
{
}
class WangWu extends Sporter implements Study
{ }

附:
Random类的使用
产生随机数的数
掌握的内容
构造函数
Random()创建一个新的随机数的生成器
Random(long seed)使用单个long种子创建一个新的随机数生成器
成员方法
int nextInt()返回下一个伪随机数,它是随机生成器的序列中均匀分布的 int 值。
int nextInt(int n) 返回一个伪随机数,它是取自此随机数生成器序列的、 在 0(包括)和指定值(不包括)之间均匀分布的 int 值。
Scanner类的使用
1.可以从键盘的输入数据
2.掌握的内容
构造函数
Scanner(inputStream source)构造一个新的Scanner,它生成的值从指定的输入流扫描
如:Scanner sc = new Scanner(System.in);
方法摘要
sc.nextInt()获取整型数据
sc.nextLine获取字符串数据
Java Study For Seven Day( 面向对象三)的更多相关文章
- Java学习笔记10(面向对象三:接口)
接口: 暂时可以理解为是一种特殊的抽象类 接口是功能的集合,可以看作是一种数据类型,是比抽象类更抽象的"类" 接口只描述所应该具备的方法,并没有具体实现,具体实现由接口的实现类(相 ...
- 20165222《Java程序设计》——实验二 面向对象程序设计
20165222<Java程序设计>——实验二 面向对象程序设计 提交点一.JUnit测试用例 知识点:这里就是了解测试代码的应用,测试代码的书写为:@Test assertEquals( ...
- Java第五次作业--面向对象高级特性(抽象类与接口)
Java第五次作业--面向对象高级特性(抽象类与接口) (一)学习总结 1.在上周完成的思维导图基础上,补充本周的学习内容,对Java面向对象编程的知识点做一个全面的总结. 2.汽车租赁公司,出租汽车 ...
- Java第四次作业——面向对象高级特性(继承和多态)
Java第四次作业--面向对象高级特性(继承和多态) (一)学习总结 1.学习使用思维导图对Java面向对象编程的知识点(封装.继承和多态)进行总结. 2.阅读下面程序,分析是否能编译通过?如果不能, ...
- Python面向对象三要素-继承(Inheritance)
Python面向对象三要素-继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.继承概述 1>.基本概念 前面我们学习了Python的面向对象三 ...
- Java第四次作业—面向对象高级特性(继承和多态)
Java第四次作业-面向对象高级特性(继承和多态) (一)学习总结 1.学习使用思维导图对Java面向对象编程的知识点(封装.继承和多态)进行总结. 2.阅读下面程序,分析是否能编译通过?如果不能,说 ...
- Java中获取键盘输入值的三种方法
Java中获取键盘输入值的三种方法 Java程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值 ...
- JAVA中常用需要设置的三个环境变量(JAVA_HOME、CLASSPATH、PATH)
JAVA中常用需要设置的三个环境变量: JAVA_HOME.CLASSPATH.PATH (一) 配置环境变量:(相对路径) 1. JAVA_HOME=x:/jdk1.6.0 2. 用%JAVA_HO ...
- Linux配置tomcat (centos配置java环境 tomcat配置篇 总结三)
♣下载安装tomcat7 ♣设置启动和关闭 ♣设置用户名和密码 ♣发布java web项目 声明:这篇教程是建立在前两篇教程的基础上的,所以,还没安装工具和jdk,可以先看这个系列的前面两篇(去到文末 ...
- Java自己动手写连接池三
Java自己动手写连接池三,核心代码; package com.kama.cn; import java.sql.Connection;import java.util.ArrayList;impor ...
随机推荐
- canvas实现图片标记
前言 由于业务需求,需要有一个图片标记功能,其实就是对图片画框画线做标记,类似微信的图片编辑 但是需要存下标记图及其标记的具体数据,.功能其实很简单,但刚开始的时候也是费了一些功夫的.我将原项目中该功 ...
- 忘记 mysql 8.0 root 密码 怎么修改
本文copy自 Centos7重置Mysql 8.0.1 root 密码 问题产生背景: 安装完 最新版的 mysql8.0.1后忘记了密码,向重置root密码:找了网上好多资料都不尽相同,根据自己的 ...
- 人形动画常见IK的处理
Unity中常见人形动画IK的处理方式 本文将尝试仅使用Untiy内置的Animator来解决常见的几种运动所需的IK.也会给出核心功能的代码实现. 效果一览:b站视频 Unity中人形角色的IK I ...
- linux磁盘分区之后,lsblk没有显示
可以看出 fdisk 创建一个 sda4 的分区 并保存退出, 但是 不管是使用 fdisk -l ,还是 lsblk 都无法显示出来, 那么导致问题的原因,主要是因为新创建了分区之后,系统没有重 ...
- reinstall nodejs 后跑不到 command
现象 : node -v 可以跑 , ng new 这些就跑不到 (确保已经安装了 global cli) 那多半是 path 的问题 https://stackoverflow.com/questi ...
- SQL Server – 树结构 (二叉树, 红黑树, B-树, B+树)
前言 很久以前有学习过各种树结构, 但后来真的没有在实际项目中运用到. 毕竟我主要负责的都是写业务代码. 太上层了 但是忘光光还是很可惜的. 所以久久可以复习一下. 记得概念也好, 帮助思考. 参考: ...
- 华为测试岗上岸,月入20K,面试无非就是这些套路!
软件测试工程师,和开发工程师相比起来,虽然前期可能不会太深,但是涉及的面还是比较广的.涉及的知识主要有 MySQL 数据库的使用.Linux 操作系统的使用.软件测试框架性的问题,测试环境搭建问题.当 ...
- 新题速看!2021阿里、腾讯、字节都在问的SQL数据库笔试题及答案都给你整理好啦!
前 言 2021到了最后一个月份,年后肯定有蛮多小伙伴需要跳槽换工作,但对于年限稍短的软件测试工程师,难免会需要进行笔试,而在笔试中,基本都会碰到一道关于数据库的大题,今天这篇文章呢,就收 ...
- Android 常用的性能分析工具详解:GPU呈现模式
此篇将重点介绍几种常用的Android性能分析工具: 一.Logcat 日志 选取Tag=ActivityManager,可以粗略地知道界面Displaying的时间消耗.当我们打开一个Activit ...
- Android Perfetto 系列 3:熟悉 Perfetto View
1. Perfetto View 界面 抓到 Perfetto Trace 之后,一般是在 ui.perfetto.dev 中打开(如果用官方提供的脚本,则会在抓去结束后自动在这个网站上打开,想看看怎 ...