继承

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( 面向对象三)的更多相关文章

  1. Java学习笔记10(面向对象三:接口)

    接口: 暂时可以理解为是一种特殊的抽象类 接口是功能的集合,可以看作是一种数据类型,是比抽象类更抽象的"类" 接口只描述所应该具备的方法,并没有具体实现,具体实现由接口的实现类(相 ...

  2. 20165222《Java程序设计》——实验二 面向对象程序设计

    20165222<Java程序设计>——实验二 面向对象程序设计 提交点一.JUnit测试用例 知识点:这里就是了解测试代码的应用,测试代码的书写为:@Test assertEquals( ...

  3. Java第五次作业--面向对象高级特性(抽象类与接口)

    Java第五次作业--面向对象高级特性(抽象类与接口) (一)学习总结 1.在上周完成的思维导图基础上,补充本周的学习内容,对Java面向对象编程的知识点做一个全面的总结. 2.汽车租赁公司,出租汽车 ...

  4. Java第四次作业——面向对象高级特性(继承和多态)

    Java第四次作业--面向对象高级特性(继承和多态) (一)学习总结 1.学习使用思维导图对Java面向对象编程的知识点(封装.继承和多态)进行总结. 2.阅读下面程序,分析是否能编译通过?如果不能, ...

  5. Python面向对象三要素-继承(Inheritance)

    Python面向对象三要素-继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.继承概述 1>.基本概念 前面我们学习了Python的面向对象三 ...

  6. Java第四次作业—面向对象高级特性(继承和多态)

    Java第四次作业-面向对象高级特性(继承和多态) (一)学习总结 1.学习使用思维导图对Java面向对象编程的知识点(封装.继承和多态)进行总结. 2.阅读下面程序,分析是否能编译通过?如果不能,说 ...

  7. Java中获取键盘输入值的三种方法

    Java中获取键盘输入值的三种方法     Java程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值 ...

  8. JAVA中常用需要设置的三个环境变量(JAVA_HOME、CLASSPATH、PATH)

    JAVA中常用需要设置的三个环境变量: JAVA_HOME.CLASSPATH.PATH (一) 配置环境变量:(相对路径) 1. JAVA_HOME=x:/jdk1.6.0 2. 用%JAVA_HO ...

  9. Linux配置tomcat (centos配置java环境 tomcat配置篇 总结三)

    ♣下载安装tomcat7 ♣设置启动和关闭 ♣设置用户名和密码 ♣发布java web项目 声明:这篇教程是建立在前两篇教程的基础上的,所以,还没安装工具和jdk,可以先看这个系列的前面两篇(去到文末 ...

  10. Java自己动手写连接池三

    Java自己动手写连接池三,核心代码; package com.kama.cn; import java.sql.Connection;import java.util.ArrayList;impor ...

随机推荐

  1. vue 报错 Component template should contain exactly one root element. If you are using v-if on multiple elements

    vue 报错 Component template should contain exactly one root element. If you are using v-if on multiple ...

  2. sql查询死锁

    --每秒死锁数量 SELECT * FROM sys.dm_os_performance_counters WHERE counter_name LIKE 'Number of Deadlocksc% ...

  3. 鸿蒙应用开发:如何与组件库(Glide)衔接?

    ​ Android 发展到现在不仅提供了很多 API,还提供了很多第三方库.这降低了我们开发者的开发难度,提升了开发效率,让应用开发更加的简单高效.众所周知,HarmonyOS 除了提供 16000  ...

  4. TFC-Pretraining: 基于时间频率一致性对时间序列进行自监督对比预训练《Self-Supervised Contrastive Pre-Training for Time Series via Time-Frequency Consistency》(时间序列、时序表征、时频一致性、对比学习、自监督学习)

    2023年11月10日,今天看一篇论文,现在17:34,说实话,想摆烂休息,不想看,可还是要看,拴Q. 论文:Self-Supervised Contrastive Pre-Training for ...

  5. ASP.NET Core – Static Files

    前言 记入一些冷门的知识. Custom content-type var fileExtensionContentTypeProvider = new FileExtensionContentTyp ...

  6. Figma 学习笔记 – Component

    参考 Guide to Components in Figma Figma Tutorial: Components - The Basics (Youtube) 定义与用途 Figma 的 Comp ...

  7. SQL Server – Schema

    前言 久仰 dbo 大名, 但是一直没有认真去看它有啥作用. 今天翻看了一下 SQL Server sample database: AdventureWorks2019, 发现它用了许多 Schem ...

  8. 八皇后dfs全排列——洛谷1219

    [USACO1.5] 八皇后 Checker Challenge 题目描述 一个如下的 \(6 \times 6\) 的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括 ...

  9. 《HelloGitHub》第 102 期

    兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. github.com/521xueweihan/HelloG ...

  10. 【赵渝强老师】在Hive中使用Load语句加载数据

    一.Hive中load语句的语法说明 Hive Load语句不会在加载数据的时候做任何转换工作,而是纯粹的把数据文件复制/移动到Hive表对应的地址.语法格式如下: LOAD DATA [LOCAL] ...