首页 > 编程语言 >java_day09

java_day09

时间:2022-10-09 20:45:14浏览次数:55  
标签:day09 java System 接口 Student println public out

Java基础

Java 面向对象

三大特性

多态

  • 即同一个方法可以根据发送对象的不同采用多种不同的行为方式

  • 一个对象的实际类型是确定的,但是指向对象的引用类型可以是很多

  • 多态存在的条件

    • 有继承关系
    • 子类重写父类的方法
    • 父类引用指向子类对象
  • 多态是方法的多态,属性没有多态

    public class Person {
        public void run(){
            System.out.println("peron run");
        }
    
        public void speak(){
            System.out.println("person speak");
        }
    }
    
    public class Student extends Person{
    
        @Override
        public void run() {
            System.out.println("student run");
        }
    
        public void learn(){
            System.out.println("student learn");
        }
    }
    
    public class Applicatioon {
        public static void main(String[] args) {
            Student stu1 = new Student();
    
            /*
            student类是person的子类 换句话说 student也是person的一种
            所以说Student对象的引用可以指向Person
            虽然指向了父类但是 调用方法还是stu1调用Student类和继承父类的方法,重写的只能调用子类重写方法
            stu2也是如此 只能调用自己person类的方法 以run方法为例 虽然执行的结果是重写后的子类run方法,但是指向的是父类的run
            因为被重写了 指向会从person run跳到student run,同时无法调用student类独有的方法
    
             */
            Person stu2 = new Student();
    
            stu1.run();
            stu2.run();
    
            stu2.speak();
    
            stu1.learn();
    //        stu2.learn();
        }
    }
    
  • instanceof 类型转换

    public class Applicatioon {
        public static void main(String[] args) {
    
            /*
                instanceof 是判断 左侧的对象是不是右边类的实例
                instanceof的运行有两步:
                    1、先编译判断左侧对象与右侧类是不是父、子类的关系 没有关系则编译失败
                    2、判断左侧的对象的的实际类型(new后面) 是否是右侧类或者子类的实例
                    如下: stu 是student 类型 与object、person、student 有直接关联 编译通过
                    stu实际类型也是student 属于object爷爷类 person父类
    
                 多看下面几个例子 就能理解了
    
             */
            Student stu = new Student();
            System.out.println(stu instanceof  Object); //true
            System.out.println(stu instanceof  Person); //true
            System.out.println(stu instanceof  Student); //true
    
            Object obj = new Student();
            System.out.println(obj instanceof  Object); //true
            System.out.println(obj instanceof  Person); //true
            System.out.println(obj instanceof  Student); //true
    
            Person p = new Student();
            System.out.println(p instanceof  Object); //true
            System.out.println(p instanceof  Person); //true
            System.out.println(p instanceof  Student); //true
    
            Person p2 = new Person();
            System.out.println(p2 instanceof  Object); //true
            System.out.println(p2 instanceof  Person); //true
            System.out.println(p2 instanceof  Student); //false
    
            Object obj2 = new Person();
            System.out.println(obj2 instanceof  Object); //true
            System.out.println(obj2 instanceof  Person); //true
            System.out.println(obj2 instanceof  Student); //false
    
    
        }
    }
    
    • 总结

      • 多态的前提在父类引用指向子类的对象 Person p = new Student();

      • 把子类转换为父类叫向上转型 这样可能会丢失自己本来的一些方法

        Person p3 = stu //子转父 向上转型

      • 把父类转换为子类叫向下转型,需要强制转换

        Student stu1 = (Student) p2 // 父转子 向下转型

      这样有利于方法的调用,减少重复的代码

知识点

static

1、类加载的顺序是 static代码块>匿名代码块>构造方法

public  class  Student {
    public Student() {
        System.out.println("构造方法");
    }

    {
        System.out.println("匿名代码块");
    }
    static {
        System.out.println("静态代码块");
    }

    public static void main(String[] args) {
        Student s1 = new Student();
        System.out.println("================");
        Student s2 = new Student();

    }
}

执行结果

静态代码块
匿名代码块
构造方法
================
匿名代码块
构造方法

2、静态代码块在第二对象开始便不会执行了,只执行一次

3、匿名代码块和对象同时产生,会和不同的对象一起执行适合赋初始值

final

1、被final修饰的类不能被继承

2、被final修饰的方法可以被继承但不能被重写

import

可以在类名的上面导入有些需要用的工具类和具有静态方法的类

这样的话可以直接调用静态方法如random() 而不用 Math.random()

抽象类

  • abstract修饰符用来修饰方法或者类,叫做抽象方法或者抽象类

  • 抽象类中可以写普通方法,可以没有抽象方法

  • 抽象方法只能存在抽象类中

  • 抽象类无法被new来创建对象,只能用来子类继承

  • 抽象方法 只有方法的声明没有方法的实现,也是让子类继承实现的

  • 子类继承抽象类,那么必须要实现抽象类没有实现的抽象方法,否则子类也只能声明为抽象类

    //抽象类
    public abstract class Action {
    
        //abstract抽象方法 只有方法名字,没有方法的实现
        //相当于一个约束,谁继承了这个类必须要为这个类的抽象方法实现
        public abstract void doSomething();
        /*
           抽象类不能被new,只能依靠子类继承实现它,就是一个约束
           抽象类中可以写普通方法
           只用抽象类才可以写抽象方法
         */
    }
    
    public class Appli extends Action{
    
    
        //继承了Action 就要重写实现这个抽象方法
        @Override
        public void doSomething() {
    
        }
    
    }
    
    public class Application {
        public static void main(String[] args) {
            Appli appli = new Appli();
        }
    }
    
  • 通过断电调式以及查看抽象类class文件,抽象类也是存在默认构造方法的

  • 抽象类相当于一种约束,用来提高开发效率

接口

  • 接口与其他类的区别

    • 普通类:只有具体实现
    • 抽象类:具体实现和抽象方法(规范)都有
    • 接口:只有抽象方法/规范!!
  • 接口其实是一种规范,定义了一组规则,比如红灯停,绿灯行,黄灯停一停

  • 接口的本质是契约,是一种行为规范,大家都必须遵守

  • OO的精髓,是对对象的抽象,而接口就体现了这一点,如何合理的去抽象这就是设计模式的核心

  • 声明接口的关键字是interface

    public interface UserService {
    
        //定义的所有属性默认都是常量 public static final
        public static final int AGE = 18;
    
        //接口中定义的多有方法都是抽象方法 默认 public abstract
        //有参无参都可以
        public abstract  void addUser(String name);
    
        void  delUser(String name);
    }
    
    public interface TimeService {
        String timer();
    }
    
    //类 实现接口使用implements关键字
    //实现接口的类必须要重写接口中的方法
    //通过实现多个接口可以实现伪多继承的方式
    public class UserServiceImpl implements UserService, TimeService{
        @Override
        public void addUser(String name) {
    
        }
    
        @Override
        public void delUser(String name) {
    
        }
    
        @Override
        public String timer() {
            return null;
        }
    
    }
    

接口小结:

  1. 声明接口的关键字不是class 而是interface
  2. 接口是一种约束和规范,不同的人在接口下有不同的实现
  3. 接口中的方法默认是public abstract的通常直接void run(); 也可有返回值类型 String run();
  4. 在接口中定义的变量默认是 public static final的常量
  5. 接口不能被直接实例化只能通过接口实现类,因为接口本身没有构造方法
  6. 使用implements实现接口,可以实现多个接口,从而实现了伪多继承的现象
  7. 实现接口的类必须要重写接口中的方法

内部类

  • 就是在一个类的内部定义了一个类。有以下几种:

    1. 成员内部类
    2. 静态内部类
    3. 局部内部类
    4. 匿名内部类

标签:day09,java,System,接口,Student,println,public,out
From: https://www.cnblogs.com/onlyxue/p/16773608.html

相关文章

  • Java设计模式 —— 组合模式
    9组合模式9.1组合模式概述CompositePattern:组合多个对象形成树形结构以表示具有部分-整体关系的层次结构。组合模式使得客户端可以统一处理单个对象和组合对象。......
  • Java基础001:数据类型及扩展
    Java的数据类型分为两大类基本类型(primitivetype)数值类型整数类型byte占1个字节范围:-128-127short占2个字节范围:-32768-32767int占4个字节范围:-2147483648-......
  • java---类充当属性
    packagecom.javasm.obj;publicclassStudentInfo{ publicintid; publicStringname; publicStringgender; //Computer类充当学生属性 //能够......
  • java后台开发最常用的开发 中文文档在线版
     自己用到的中文文档:这里做个汇总,方便自己查看。spring:​​https://lfvepclr.gitbooks.io/spring-framework-5-doc-cn/content/​​springMVC:​​https://www.w3cschool.c......
  • JAVA字段的初始化规律
    1.类的构造方法(1)“构造方法”,也称为“构造函数”,当创建一个对象时,它的构造方法会被自动调用。构造方法与类名相同,没有返回值。(2)如果类没有定义构造函数,Java编译器在......
  • 用一份JAVA工程师的求职简历来说说求职简历怎么写
    这是一篇我比较想看到的简历指导的文章。但是我比较反对简历造假。我觉得会什么写什么把。可以先看看我的这篇文章:刚实习结束,就要做面试官,谈谈我的想法自己做过面试官以后,自......
  • Java基本语法 for循环
    for循环虽然所有循环结构都可以用while或者do...while表示,但Java提供了另一种语句——for循环,使一些循环结构变得更加简单。for循环执行的次数是在执行前就确定......
  • Python学习路程——Day09
    Python学习路程——Day09文件操作1、文件的概念''' 操作系统为了使用户更好的使用计算机,而创建的一个快捷方式。 双击一个文件,相当于把硬盘的数据资源加载到内存中。......
  • day09-1存储引擎
    存储引擎1.基本介绍基本介绍MySQL的表类型由存储引擎(StorageEngines)决定,主要包括MyISAM、innoDB、Memory等MySQL数据表主要支持六种类型,分别是:CSV,Memory,ARCHIVE......
  • 【Java高级】程序、进程和线程
    1.程序一段静态的代码(未启动的APP),可以完成特定任务。2.进程正在运行的程序(挂在后台的APP),系统给进程分配了内存。3.线程程序内部的一条执行路径(比如QQ中执行聊天功能,发......