• 2019-05-19 Java学习日记 day9


    修饰类

    feinal关键字特点:

      修饰类,类不能被继承

      修饰变量,变量就变成了常量,只能被赋值一次

      修饰方法,方法不能被重写

    final修饰变量叫做常量们一般会与public static共用

    class demo1_final
    {
        public static void main (String args  []){
        son s=new son();
        s.print();
        }
    }
    class son
    {
        final int num=10;
        public void print(){
            num=20;
        System.out.println(num);
        }
    }
    案例

    基本类型:值不能被改变

    引用类型:地址值不能被改变,对象中的属性可以改变

    class demo2_final
    {
        public static void main (String args []){
            final person p =new person("一",20);
            p.setname("二");
            System.out.println(p.getname()+","+p.getage());
            method(10);
        }
        public static void method(final int x){
        System.out.println(x);
        }
    }
    class person
    {
        private String name;
        private int age;
        public person(){}
        public  person(String name,int age){
        this.name=name;
        this.age=age;
        }
        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;
        }
    }
    案例

    多态(polymorphic)

      事物存在的多种形态

    多态前提:

      要有继承关系

      要有方法重写

      要有父类引用指向子类对象

    class demo1_polymorphic
    {
        public static void main (String args []){
            cat c=new cat();
            c.eat();
            animal a=new cat();  //父类引用指向子类对象
            a.eat();
        }
    }
    class animal
    {
        public void eat(){
        System.out.println("吃饭");
        }
    }
    class cat extends animal{
     public void eat(){
        System.out.println("吃鱼");
     }
    }
    案例

    多态的成员变量特点:编译看左边(父类),运行看左边(父类)

    成员方法:编译看左边(父类),运行看右边(子类),动态绑定

    class demo2_polymorphic
    {
        public static void main (String args []){
        father f=new son();
        System.out.println(f.num);//成员变量
        f.print();   //成员方法
        }
    }
    class father
    {
        int num=10;
        public void print(){
        System.out.println("father");
        }
    }
    class son extends father
    {
        int num=20;//成员变量
        public void print(){  //成员方法
        System.out.println("son");
        }
    }
    案例

    静态方法:

      编译看左边(父类),运行看左边(父类)

      只有非静态的成员方法,编译看左边,运行看右边

    向上转型

    向下转型

    class demo3_polymorphic
    {
        public static void main (String args []){
            person p =new superman();   //向上转型
            System.out.println(p.name);
            p.print();
            System.out.println("--------------");
            superman sm=(superman)p;  //向下转型
           System.out.println(sm.name);
            sm.fly();
        }
    }
    class person
    {
        String name="Jung";
        public void print(){
        System.out.println("读书");
        }
    }
    class superman extends person
    {
    String name="superman";
    public void fly(){
    System.out.println("会飞");
    }
         public void print(){
         System.out.println("上班");
         }
    }
    案例

    多态的好处:

      提高了代码的维护性(继承保证)

      提高了代码的展性(多态保证)

    多态的弊端:

      不能使用子类的持有属性和行为

    关键字(instanseof)

    判断前边的引用是否是后边数据类型

    class demo4_animal
    {
        public static void main (String args []){
        method(new cat());
        method(new dog());
        } 
        public static void method(animal a){
        if(a instanceof cat){
        cat c=(cat)a;
        c.eat();
        
        }else if(a instanceof dog){
        dog d=(dog)a;
        d.eat();
        d.lookhome();
        }else{
        a.eat();
        }
    
        }
    }
    class animal
    {
        public void eat(){
        System.out.println("动物吃饭");
        }
    }
    class cat extends animal
    {
        public void eat(){
        System.out.println("猫吃鱼");
        }
    }
    class dog extends animal
    {
        public void eat(){
        System.out.println("狗吃屎");
        }
        public void lookhome(){
        System.out.println("狗看家");
        }
    }
    案例

    抽象类

      抽象类和抽象方法必须用abstract关键字修饰::

        abstract class类名()

        public abstract void eat();

      抽象类不一定有抽象方法,有抽象方法的类一定是抽象类或者是接口

      抽象类不能实例化:

        按照多态方式,有具体的子类实例化,其实这也是多态的一种,抽象类多态

      抽象类的子类:

        要么是抽象类

        要么重写抽象类中的所有抽象方法

    class demo1_abstract
    {
        public static void main (String args []){
        animal a=new cat();   //父类引用指向子类对象
        a.eat();
        }
    }
    abstract class animal
    {
        public abstract void eat();
    }
    class cat extends animal
    {
        public void eat(){
        System.out.println("猫吃鱼");
        }
    }
    案例

    抽象类的成员特点:

      成员变量:既可以是变量,也可以是常量

      构造方法:用于子类访问父类数据的初始化

    特性:

      抽象方法,强制要求子做的事情

      非抽象方法 子类继承的事情,提高代码复用性

    class demo2_abstract
    {
        public static void main (String args []){
         吴江德 p=new 吴江德();
         p.断手();
        }
    }
    abstract class 一指神功
    {
        public abstract void 断手();
    }
    class 吴江德 extends 一指神功
    {
        public void 断手(){
        System.out.println("断一只手指");
        }
    }
    class 吴基德 extends 一指神功
    {
        public void 断手(){
        System.out.println("断三只手指");
        }
    }
    练功秘籍

    接口

      从狭义的角度讲就是指Java中的interface。

       从广义的角度讲对外提供规则的都是接口。

    接口特点:

      接口用关键字Interface表示

                         interface 接口名 { }

      类实现接口用implements表示

                          class 类名 implements 接口名 { }

      接口不能实例化

                     (按照多态的方式来实现)

      接口的子类:

                  可以是抽象类,但是意义不大

                   可以是具体类。要重写接口中的所有抽象方法(推荐方案)

  • 相关阅读:
    SpringBoot中如何优雅的使用多线程
    ASP.NET MVC经典项目ProDinner项目解析(5)
    ASP.NET MVC经典项目ProDinner项目解析(4)
    ASP.NET MVC经典项目ProDinner项目解析(1)
    ASP.NET MVC经典项目ProDinner项目解析文章索引
    致我们工作中的设计模式之备忘录模式
    致我们工作中的设计模式之适配器模式
    ASP.NET MVC经典项目ProDinner项目解析(3)
    童话进行中的Silverlight
    致我们工作中的设计模式之基本原则职责单一原则
  • 原文地址:https://www.cnblogs.com/JungTan0113/p/10891842.html
Copyright © 2020-2023  润新知