zoukankan      html  css  js  c++  java
  • JAVA自学笔记09

    JAVA自学笔记09

    1、子类的方法会把父类的同名方法覆盖(重写)
    2、final:
    1)可修饰类、方法、变量
    2)修饰类时:此时该类变为最终类,它将无法成为父类而被继承
    3)修饰方法时:该方法将无法被重写
    4)变量为常量,其值不可被改变
    修饰引用类型时:引用类型的地址值不能变但其成员变量(堆内存的值)等是可以变的
    5)初始化时机:
    被final修饰的变量只能赋值一次
    在构造方法完毕前修饰变量,避免其被构造方法改变(非静态的常量)
    3、多态
    1)某一个事物,在不同时刻表现出不同的状态
    2)前提与体现:有继承关系、有方法重写、有父类引用指向子类对象
    即格式为 父类名 父类对象名 = new 子类名();
    3)成员访问特点:
    ①构造方法:创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化
    ②成员变量:编译运行都看左边的类,以父类所有的成员变量为准
    ③成员方法:编译看左边,运行看右边(子类重写父类同名方法)
    ④静态方法:编译看左边,运行看左边(不存在方法重写)
    4)优点:
    ①提高代码维护性
    ②提高代码扩展性
    5)弊端:不能使用子类特有的功能
    解决:①创建子类对象调用相关方法即可
    ②(本方式较好,因为没有再创建新的对象,节约内存。向下转型,要求该f必须是能够转换为Zi的)使用多态后,将创建的父的引用赋值给子类的引用,即
    Zi z=(Zi)f;//使用了强制类型转换
    向上转型:
    Fu f=new Zi();
    6)多态继承中的内存图解
    这里写图片描述
    7)多态中的对象变化内存图解
    异常:ClassCastException 类不匹配,易在向下转型中出现
    这里写图片描述
    8)多态多层继承时
    子类中有和父类中一样的方法,就重写
    子类中没有和父类中出现过分方法,该方法就被继承过来
    @例题1:看程序写结果

    class A {
        public void show() {
            show2();
        }
        public void show2() {
            System.out.println("我");
        }
    }
    class B extends A {
        /*
        public void show() {
            show2();
        }
        */
    
        public void show2() {
            System.out.println("爱");
        }
    }
    class C extends B {
        public void show() {
            super.show();
        }
        public void show2() {
            System.out.println("你");
        }
    }
    public class DuoTaiTest4 {
        public static void main(String[] args) {
            A a = new B();
            a.show();//多态继承,运行看右边,B类由A类继承了自己没有的show(),
            //show()调用show2(),根据就近原则,输出“爱”
    
            B b = new C();//运行看右边,调用super.show()即B类的show(),接
            //着调用show2(),由就近原则,输出“你”
            b.show();
        }
    }

    例如:

    class Fu{
    public int num=100public void show(){
    System.out,println("show fu");
    }
    public static void Function(){
    System.out,println("Fuction fu");
    }
    }
    class Zi extends Fu{
    public int num=1000public int num2=200public void show(){
    System.out,println("show zi");
    }
    public void method(){
    System.out,println("method zi");
    }
    public static void Function(){
    System.out,println("Fuction zi");
    }
    }
    class Demo{
    public static void main(String args[]){
    Fu f = new Zi();
    System.out,println(f.num);//100
    System.out,println(f.num2);//找不到符号
    f.show();//show zi
    f.method();//报错:找不到符号
    f.Funcction();//Fuction zi
    }
    }

    2、抽象类
    1)在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类
    2)特点:
    ①抽象类和抽象方法必须用abstract关键字修饰
    abstract class 类名{}
    public abstract void 方法名();//省去花括号
    ②抽象类不一定有抽象方法但有抽象方法的类一定是抽象类
    ③抽象类不能实例化,不能创建关于抽象类的对象,但它有构造方法 。抽象类的子类要么也是抽象类,要么重写抽象类中所有的抽象方法。进而通过多态的方式创建对象间接实现实例化:
    抽象类名 对象名=new 继承抽象类的类构造方法名();
    3)抽象类的成员的特点:
    ①成员变量:可以是变量也可以是常量
    ②构造方法:有构造方法,但不能实例化,它是用作子类访问父类数据时进行初始化的
    ③成员方法:可以有抽象方法,限定子类必须完成某几种特定的功能;也可以有非抽象方法被子类所继承,以提高代码复用性
    4)抽象类的注意事项:
    一个类若无抽象方法,可不可以定义为抽象类?如果可以,有什么意义?
    可以,这样做的意义是不允许创建对象

    abstract不能和哪些关键字共存?
    private 冲突
    final 冲突
    static 无意义

    3、接口
    1)利用接口定义额外功能
    2)接口特点:
    ①格式:interface 接口名{}
    类实现接口:class 类名 implements 接口名{}

    //定义动物培训接口
    interface AnimalTrain{
    public abstract jump();//定义抽象方法
    }
    class Cat implement AnimalTrain{
    public void jump(){
    System.out.println("猫跳");
    }
    }
    class Demo{
    public static void main(String args[]){
    AnimalTrain at=new Cat();
    at.jump();//猫跳  
    }
    }

    ②接口不能直接实例化,要通过多态
    具体类多态、抽象类多态、接口类多态(最常用)
    ③接口的子类:要么是抽象类,要么重写接口中所有的抽象方法
    3)接口的成员的特点
    ①一般来说:接口名+Impl这种格式是接口的实现类的命名规则
    ②接口的成员变量默认为常量,即默认修饰符为public static final
    ③ 没有构造方法 。所有的类都默认继承一个类Object(类层次结构的根类、每个类都要用Object作为父类)
    ④接口成员方法不能带方法体,即接口成员方法必须是抽象的且必须是public的,
    默认修饰符public abstract

    4、
    1)类与类的关系:继承关系,只能是单继承,但可以多层继承
    2)类与接口:类实现接口,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口
    3)接口与接口
    继承关系,可以单继承,也可以多继承
    4)抽象类与接口的区别
    ①成员区别:常量、变量、抽象方法、非抽象方法/常量、抽象方法
    ②关系区别:见1)~3)
    ③抽象类被继承体现的是“is a”的关系,体现共性
    接口实现的是“”

  • 相关阅读:
    You are not late! You are not early!
    在同一个服务器(同一个IP)为不同域名绑定的免费SSL证书
    Vue.js Is Good, but Is It Better Than Angular or React?
    It was not possible to find any compatible framework version
    VS增加插件 Supercharger破解教程
    Git使用ssh key
    Disconnected: No supported authentication methods available (server sent: publickey)
    VS 2013打开.edmx文件时报类型转换异常
    asp.net MVC4 框架揭秘 读书笔记系列3
    asp.net MVC4 框架揭秘 读书笔记系列2
  • 原文地址:https://www.cnblogs.com/Tanqurey/p/10485301.html
Copyright © 2011-2022 走看看