1:Math类的随机数(掌握)

   类名调用静态方法。

   包:java.lang

  类:Math

  方法:public static double random():

Java.lang包下的类是不用导包就可以直接使用的。

   产生1-100之间的随机数:

      int number = (int)(Math.random()*100)+1;

2:如何使用API。(掌握)

  A:找到文档,打开文档。

  B:点击左上角的显示变成隐藏,然后点击索引

   C:你应该知道你要找谁?Math

 所以,你就在那个输入框里面输入Math,然后回车,再回车。

  D:看这个类的结构

        java.lang

    类 Math

  java.util

        类 Scanner

   如果是java.lang包下的类,是可以直接使用的。(Math),否则,就需要导包才能使用。(Scanner)

  E:看看对这个类的说明。

 F:看构造方法

   名称:字段 --  成员变量   -- 属性。

  a:有构造方法,那么,就通过构造方法创建对象使用。

  b:没有构造方法,那么,这个类的成员一般都是静态。

   通过类名调用。

 G:按照正常的操作使用方法。

    左边:

      是否静态:如果静态修饰,那么可以通过类名调用。否则,就必须创建对象调用。

       是否有明确返回值:如果是void类型,就直接调用即可。否则,就可以输出或者赋值。

    右边:

      看方法名:不要写错了。

      看参数:看参数类型及个数。

3:继承(掌握)extends

  (1)把多个类中的相同的属性和行为进行抽取,封装到一个类中,然后再建立新类的时候,不需要从头做起,继承刚才定义的那个类即可。

  (2)好处:

    A:提高代码的复用性。

    B:让类与类之间产生了一个关系,是多态的前提。

  (3)什么时候使用继承?

    A:如果类之间存在着:is a 的关系,就可以考虑使用继承。

    B:不要为了继承部分功能,而去使用继承。详细见例子:

       /*继承一定要符合is a 的关系。*/class Demo5{public static void main(String[] args){System.out.println("Hello World!");}}class Animal{String name = "巴马";int age = 80;public void eat(){System.out.println("吃");}public void sleep(){System.out.println("睡");}private void method(){}}class Cat extends Animal {public void climb(){System.out.println("爬树");}public void catchM(){System.out.println("抓耗子");}public void eatM(){System.out.println("生吃耗子");}}class Person extends Cat{}  //不要为了人有“爬树”和“抓耗子”的工能,而去继承Cat类,语法上没有错误,但是在逻辑上有问题。因为Cat类还有“生吃耗子”工能,而人没有。

View Code

(4)继承的特点:

    A:Java只支持单继承,不支持多继承。

         为什么?如果支持多继承,就会有调用不明确的问题。

    B:Java支持多层(重)继承。

例子:

   /*继承的特点:支持单继承,不支持多继承。支持多层继承。Object是多有类的直接或间接父类。*/class Demo4{public static void main(String[] args){Person p = new Person();System.out.println(p.name);System.out.println(p.age);p.eat();p.sleep();}}class Animal{String name = "巴马";int age = 80;public void eat(){System.out.println("吃");}public void sleep(){System.out.println("睡");}private void method(){}}class Pig extends Animal{}//class Person extends Monkey,Animal{}    //一个类不能多继承class Monkey extends Animal{}class Person extends Monkey{}            //支持多层继承

View Code

  (5)super和this的区别?

    A:super是一个关键字,代表父类的存储空间标识。(可以理解为父亲对象的引用,单实际不是父亲对象的引用)

       B:它和this的用法相似

        a:成员变量

          this.变量  --  本类的

          super.变量 --  父类的

       b:构造方法

         this(...)  --  本类的

         super(...) --  父类的

        c:成员方法

          this.方法名() --  本类的

        super.方法名() --  父类的

例子:

/*super:代表父类的内存空间使用方式:1、super区分父类成员变量与子类成员变量2、super放在构造方法中第一行,用来调用父类的构造方法*/class Demo6{public static void main(String[] args){//Person p = new Person();//p.showMe();
Person p2 = new Person("巴豆",3);p2.showMe();}}class Animal{String name = "巴马";int age = 80;//定义空参构造/*public Animal(){System.out.println("我是父类的空参构造方法");}*///定义两个参数构造public Animal(String name,int age) {System.out.println("我是父类的有参构造方法");this.name = name;this.age = age;}public void eat(){System.out.println("吃");}public void sleep(){System.out.println("睡");}private void method(){}}class Person extends Animal {String name = "巴驴";int age = 60;public Person(){//super();      //默认都有super()构造方法super("aaa",100);System.out.println("我是子类的空参构造方法");}public Person(String name,int age) {//this();       //this不可以与super同时调用构造方法super(name,age);System.out.println("我是子类的有参构造方法");this.name = name;this.age = age;}public void showMe(){String name = "巴骡";int age = 70;//局部变量直接写变量名即可
System.out.println("姓名:"+name+" 年龄:"+age);//本类的成员变量加this区分
System.out.println("姓名:"+this.name+" 年龄:"+this.age);//父类的成员变量加super区分
System.out.println("姓名:"+super.name+" 年龄:"+super.age);//如果同时存在,则就近原则
}}

View Code

(6)继承关系内存图:

   (7)子父类实例化过程

      子类中所有的构造函数默认都会访问父类中空参数的构造函数,原因是构造方法中第一行默认的super(),子类具备父类中的数据,所以需要先明确父类是如何初始化的,即调用父类的构造方法。父类存储空间优于子类对象。

大致顺序:

  (8)标准的继承关系代码

  /*标准的继承关系代码*/class Demo9{public static void main(String[] args){Cat cat = new Cat("Tom",5,"黄黑条");cat.method();cat.method2();cat.setName("kitty");cat.setColor("pink");cat.showMe();}}class Animal{private String name;private int age;public Animal() {}public Animal(String name,int age) {this.name = name;this.age = age;}public void method(){System.out.println("我是父类的第一个方法");}public void method2(){System.out.println("我是父类的第二个方法");}//-----------------------------------------------------------------public void setName(String name) {this.name = name;}public String getName() {return name;}public void setAge(int age) {this.age = age;}public int getAge() {return age;}}class Cat extends Animal{private String color;public Cat() {}public Cat(String name,int age,String color) {super(name,age);this.color = color;}public void method(){System.out.println("我是子类的重写的第一个方法");}public void showMe(){System.out.println("name:"+super.getName()+" age:"+getAge()+" color:"+color);}public void setColor(String color) {this.color = color;}public String getColor() {return color;}}

View Code

  (9)子父类中成员变量的用法:

        A:名称不同,这个太简单了。

      B:名称相同,子类对象的在使用的时候:

       先找子类局部范围

       再找子类成员范围

       最后找父类成员范围

        父类的父类成员范围

      (10)子父类中成员方法的用法:

           A:名称不同,这个太简单了。

         B:名称相同,子类对象的在使用的时候:

          先找子类的

         再找父类的

        C:方法重写(overiding)

       要求:

        a.子类方法访问权限需要大于等于父类方法访问权限

       b.返回值类型:

         基本类型/void:必须相同

        引用类型:子类返回值类型必须为父类返回值类型的子类

       c.函数名相同

        d.参数列表:相同为重写,不同时为重载

     应用:子类需要父类功能,但又在功能上又有多增加时,可以复写父类方法。子类比父类更强大。

    注意事项:

      a.父类中私有方法不可以被覆盖。

       b.在子类中想调用父类自己的方法可以使用super关键字

        c.静态只能覆盖静态。(这个不能算,因为静态跟类相关)

例子:

class OveridingMethod {public static void main(String[] args) {Zi2 zi2 = new Zi2();zi2.method2();}}class Fu {public void method() {}}class Zi extends Fu {public void method() {}}class Fu2 {Fu fu = new Fu();public Zi method2() {    报错,子类返回值类型必须为父类返回值类型的子类,此处不是。
System.out.println("我是子类2的方法");return zi;}}class Zi2 extends Fu2 {Zi zi = new Zi();public Fu method2() { //报错,子类返回值类型必须为父类返回值类型的子类,此处不是。
System.out.println("我是子类2的方法");return fu;}}

View Code

    (11)子父类中构造方法的用法:

    A:子类的初始化过程中,首先回去执行父类的初始化动作。

        因为子类的构造方法中默认有一个super()。

       为什么?子类要使用父类的成员变量,这个初始化,必须在子类初始化之前完成。

       所以,子类的初始化过程中,会先执行父类的初始化。

    B:如果父类没有无参构造方法

    A:使用super调用父类的带参构造。推荐方式。

     B:使用this调用本身的其他构造。

4:代码块(面试题)

(1)代码块:写代码的区域,使用{}作为范围限定

    局部代码块:

      位置:方法内

      作用:控制变量作用域

    构造代码块:

      位置:成员位置,类中,方法外

      作用:将构造器中相同代码抽取,在构造器前执行

    静态构造代码块:

      位置:成员位置,类中,方法外

      作用:只在第一次创建对象时初始化一次

/*代码块:写代码的区域,使用{}作为范围限定局部代码块:位置:方法内作用:控制变量作用域构造代码块:位置:成员位置,类中,方法外作用:将构造器中相同代码抽取,在构造器前执行静态构造代码块:位置:成员位置,类中,方法外作用:只在第一次创建对象时初始化一次默认初始化>显示初始化>构造代码块>构造方法
*/
class Demo2
{public static void main(String[] args) {int i = 10;{int i2 = 20;}System.out.println(i);//System.out.println(i2);  超出作用域
Person p = new Person();Person p2 = new Person("巴马",80);p2.showMe();}
}class Person
{//定义Person类的属性private String name =  "巴骡";private int age = 60;//定义一个构造代码块
    {System.out.println("我是一个构造代码块");name = "巴驴";age = 70;System.out.println("我是要初始化的步骤1");System.out.println("我是要初始化的步骤2");System.out.println("我是要初始化的步骤3");System.out.println("我是要初始化的步骤4");}static{System.out.println("我是一个静态构造代码块");}//定义Person类的构造方法public Person(){System.out.println("我是空参构造方法");}public Person(String name,int age){System.out.println("我是有参构造方法");//this.name = name;//this.age = age;
    }public void showMe(){System.out.println("name:"+name+" age:"+age);}//定义Person类的普通方法public void eat(){System.out.println("吃了");}public void sleep(){System.out.println("睡了");}//定义Person类的getters和setterspublic void setName(String name){this.name = name;}public String getName(){return name;}public void setAge(int age) {this.age = age;}public int getAge(){return age;}
}    

View Code

  (2)执行顺序:

     静态代码块 --> 构造代码块 --> 构造方法

      默认初始化>显式初始化>构造代码块初始化>构造方法初始化

  (3)注意事项:

      静态代码块只执行一次

5:final(掌握)(简单总结为:修饰的东西不能变!)

  (1)是一个关键字,可以用于修饰类,成员变量,成员方法。

   (2)特点:

    它修饰的类不能被继承。

    它修饰的成员方法是不能被子类重写的。

     它修饰的成员变量是一个常量。常量必须有值,且常量的值只能赋值一次。如果是成员变量,只需要在对象创建之前赋值即可。

    引用类型常量可以更改其堆内存对象中的值。

例:

a.final修饰的类不能被继承。

class Demo10 {public static void main(String[] args) {}}final class Fu{   // 修饰类,类不可以被继承。

}class Zi extends Fu{}

View Code

b.它修饰的成员方法是不能被子类重写的.

 class Demo10 {public static void main(String[] args) {}}class Fu{final public void showMe(){} //修饰方法,方法不可以被重写。

}class Zi extends Fu{public void showMe(){}}

View Code

c.常量必须有值

 class Demo10 {public static void main(String[] args) {final int a;System.out.println(a);  //常量必须有值。此处会报错
}}

View Code

d.常量的值只能赋值一次

 class Demo10 {public static void main(String[] args) {final int a=10;a=20;  //常量的值只能赋值一次,此处报错
System.out.println(a);}}

View Code

e.如果是成员变量,只需要在对象创建之前赋值即可

class Demo10 {public static void main(String[] args) {Fu fu = new Fu("唐嫣");  //创建对象时赋值
}}class Fu {//成员变量final private String name;final private int age = 20; //创建成员变量时赋值//构造器public Fu(String name) {this.name = name;}}

View Code

f.引用类型常量可以更改其堆内存对象中的值,引用类型变量被final修饰,不能再指向其他对象地址

6:同一个文档里不能有两个以上Public修饰的类

public class name{}

public class age{}    //同一个文档里有两个以上Public修饰的类会报错。

附:

题一:面向对象基础知识全涵盖例(标准学生类的定义及使用)

 /*标准学生类的定义及使用*/class Test{public static void main(String[] args){/*创建对象使用对象调用方法使用对象调用方法访问属性*/Student s = new Student();s.setName("近平");s.setAge(24);s.address = "上海,广州也可以!";s.study("java");System.out.println(s.eat());System.out.println(s.hitBeanBean(3));Student.jiayou("i have a dream,a code dream and a money dream!");Student s2 = new Student("克强",26);s2.study("SQL");System.out.println(s2.eat());System.out.println(s2.hitBeanBean(6));Student.jiayou("i have a dream,a code dream and a money dream!");}}/*给类命名成员变量的定义构造方法的定义普通方法的定义getters/setters*///给类命名class Student{//成员变量的定义private String name;private int age;public static String address = "北京,梦开始的地方!";//构造方法的定义public Student(){}//一个参数的构造也可以定义public Student(String name,int age) {this.name = name;this.age = age;}//普通方法的定义public void study(String neirong) {System.out.println("我学的是"+neirong);}public String eat(){return "我已经吃了!";}public String hitBeanBean(int cishu) {return "我今天打了"+cishu+"次豆豆。我很舒服。";}public static void jiayou(String xuanyan) {System.out.println(xuanyan);}//getters/setterspublic void setName(String name) {this.name = name;}public String getName(){return name;}public void setAge(int age) {this.age = age;}public int getAge(){return age;}}

View Code

转载于:https://www.cnblogs.com/hezhiyao/p/7475914.html

继承extends、super、this、方法重写overiding、final、代码块_DAY08相关推荐

  1. Java面向对象 继承,super,方法重写

    /* 继承:表示父类跟子类之间的关系当两个类或者多个类具备相同的属性和方法的时候,可以提取出来,变成父类,子类可以继承子类跟父类是is-a的关系使用:1.使用继承的时候需要使用extend关键字2.使 ...

  2. 面向对象1---this、构造方法、方法重载,静态,权限、getter和sett、继承、super、方法重写、多态

    面向对象 1.类与对象 面向对象: 类:就是图纸 属性:这一类的共同属性 动作方法:这一类事务共同能执行的功能 对象使用类创建的某一个东西 对象能干什么,完全于类是如何定义的 写代码 类要使用clas ...

  3. (JAVA学习笔记) 类的继承,super,方法的重写,多态

    文章目录 类的继承,super,方法的重写,多态 1.类的继承 代码演示: 2.super和this 代码演示: 3.方法的重写 代码演示: 4.多态 代码演示: 类的继承,super,方法的重写,多 ...

  4. JAVA面向对象OOP→继承extends、构造方法super、方法重写override、样例代码

    继承(extends扩展) 一个子类只有一个父类,单一继承,可以在不同包内,不同包要导入import 基类(Object)如果一个类不继承任何类,默认就自动继承Object类 子类可以对父类的属性不用 ...

  5. JAVA day06 继承,super,方法的重写,抽象类

    1.继承(extends) 继承涉及到两个类,子类(扩展类/衍生类)跟父类(基类/超类) 当多个类中存在相同属性和行为时,将这些内容单独提取到一个类,那么多个类里就不用再定义这些属性和行为了,只要继承 ...

  6. Java笔记013-IDEA、包、访问修饰符、封装、继承、多态、Super、方法重写/覆盖(override)、java的动态绑定机制

    目录 面向对象编程(中级部分) IDE(集成开发环境)-IDEA IDEA介绍 IDE(集成开发环境)-Eclipse Eclipse介绍 IDEA的安装 IDEA的基本介绍和使用 创建一个java项 ...

  7. java多态的两种形式_java核心(八):继承与方法重写、final、多态性的两种描述形式...

    一.继承的作用 子类继承父类的属性和方法,实现代码的复用: 子类扩充自己的标准,实现精细化的类型定义. 二.子类构造方法的限制 子类在实例化的时候,默认先实例化父类对象,然后再实例化本类对象: 子类构 ...

  8. 小雨点的JAVA--三大特性,方法重写,final

    @[TOC]三大特性 #继承 子类继承父类,可以得到父类全部的属性和方法(除了父类的构造方法外),但不见得可以直接访问(如父类的私有属性和方法) instanceof:左边对象右边是类,当属于的时候返 ...

  9. Java 多线程:synchronized 关键字用法(修饰类,方法,静态方法,代码块)

    前言 在 多线程生成的原因(Java内存模型与i++操作解析) 中,介绍了Java的内存模型,从而可能导致的多线程问题.synchronized就是避免这个问题的解决方法之一.除了 synchroni ...

最新文章

  1. Wpf体系结构的学习
  2. vue click事件冒泡,默认行为
  3. Android Listview中Button按钮点击事件冲突解决办法
  4. linux系统的安全机制有哪些内容,系统安全机制
  5. window统计文本字节_【NLP】机器如何认识文本 ?NLP中的Tokenization方法总结
  6. 雪,是死掉的雨,是雨的精魂
  7. 创建visual basic2005 数据库
  8. 最新正版win7系统下载
  9. DeepMD安装及Unbuntu下Nvidia显卡升级(防跳坑)
  10. 解决attempted relative import with no known parent package问题
  11. FTP上传下载失败或文件为空
  12. 我使用过的拼音输入法
  13. 关于Petri网的学习笔记
  14. 串口编程之三:VMware虚拟机下的串口调试
  15. SAP FICO 财务成本知识(初)
  16. [SUCTF 2019]Game
  17. 横向HTML网页,html横向
  18. 计算机专项内审检查表,计算机系统专项内审检查表
  19. COSMIC数据库简介
  20. abp框架mysql连接配置,ABP框架+.net core3.1搭建的项目访问MySQL数据库

热门文章

  1. Spring Boot(四)Spring Boot @ConfigurationProperties实例
  2. Windows下编程需要看哪些书
  3. 【Linux】一步一步学Linux——dpkg命令(269)
  4. ETH 开发环境搭建及智能合约 helloworld
  5. 每天一道LeetCode-----给定序列中2/3/4个元素的和为target的所有集合,或3个元素的和最接近target的集合
  6. 1030 完美数列 (25 分)(c语言)
  7. keepalived(4)——演练故障出现时keepalived的状态
  8. hadoop(4)——用python代码结合hadoop完成一个小项目
  9. hibernate的映射关系配置及对会话工厂的初始化。以及struts2写实例查询
  10. LeetCode每日一题 416. 分割等和子集