• day09


    09.01 面向对象(多态的概述及其代码实现)
     A.多态概述(ploymorphic)
      事物存在的多种形态
     B.多态前提
      a.要有继承
      b.要有方法重写
      c.要有父类引用子类对象
     C.案例演示

    package day09;
    public class day09_01 {
        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("Animal eat");
        }
    }
    class Cat extends Animal{
        public void eat(){
            System.out.println("Cat eat");
        }
    }
    View Code

    09.02 面向对象(多态的成员访问特点)
     A.多态中的成员方法特点
      a.成员变量
        编译看左,运行看左
      b.成员方法(指的是非静态的成员方法)
        编译看左,运行看右
      c.静态方法
        编译看左,运行看左
        (静态和类相关,算不上重写,所以,访问还是看右边)
     B.案例演示

    package day09;
    
    public class day09_02 {
        public static void main(String[] args) {
            Father f = new Son();
            System.out.println(f.num);
        }
    }
    //成员变量,(父类引用指向子类对象)左左
    class Father {
        int num = 10;
    }
    class Son extends Father{
        int num = 20;
    }
    
    public class day09_02 {
        public static void main(String[] args) {
            Father f = new Son();
            f.print();
        }
    }
    //成员方法,(父类引用指向子类对象)左右
    class Father {
        public void print(){
            System.out.println("father");
        }
    }
    class Son extends Father{
        public void print(){
            System.out.println("Son");
        }
    }
    ---------------------------------
    public class day09_02 {
        public static void main(String[] args) {
            Father f = new Son();
            f.method();
        }
    }
    //静态得到,(父类引用指向子类对象)左左
    class Father {
        public static void method(){
            System.out.println("father static method");
        }
    }
    class Son extends Father{
        public static void method(){
            System.out.println("Son  static method");
        }
    }
    View Code

    09.03 面向对象(多态的概述及其代码实现)
      成员方法
        编译看左,运行看右

    09.04 面向对象(多态的概述及其代码实现)
      静态方法
        编译看左,运行看左
    09.05 面向对象(超人的故事)
     A.案例演示

    package day09;
    public class day09_05 {
        /*基本数据类型自动类型提升和强制类型转换
         * int i = 10;
         * byte b = 20;
         * i=b;                //自动类型提升byte--> int
         * b=byte()i;        //强制类型提升int -->byte
         */
        public static void main(String[] args) {
            SuperMan p =new SuperMan();
            System.out.println(p.name);
            p.Tlak();
            //无法用 p.fly()调用子类的fly()方法,因为编译看左,父类没有fly(),编译失败
            SuperMan sm = (SuperMan)p;
            sm.fly();
        }
    }
    class Person{
        String name = "John";
        public void Tlak(){
            System.out.println("tlak bussiness");
        }
    }
    class SuperMan extends Person{
        String name = "SuperMan";
        public void Tlak(){
            System.out.println("tlak Son class");
        }
        public void fly(){
            System.out.println("fly out");
        }
    }
    View Code

    09.06 面向对象(多态的向上转型和向下转型)
      Person p = new Person()
      SuperMan sm = (SuperMan)p;
    09.07 面向对象(多态的好处和弊端)
     A.多态的好处
      a.提高了代码的复用性
      b.提高了代码的拓展性
     B.案例演示
      多态的好处

    package day09;
    public class day09_07 {
        public static void main(String[] args) {
            method(new Cat7());
            method(new Dog7());
        }
        /*public static void method(Cat7 c){
            c.eat();
        }*/
        public static void method(Animal7 a){
        //    a.eat();      //调用子类共有的属性
            //如果先调用子类特有的属性呢?
            //关键字 :instanceof,判断前面的引用是否是后边的数据类型
            if(a instanceof Cat7){
                Cat7 c = (Cat7)a;
                c.eat();
                c.catchMouse();
            }
        }
    }
    class Animal7{
        public void eat(){
            System.out.println("Animal eat fish");
        }
    }
    class Cat7 extends Animal7{
        public void eat(){
            System.out.println("Cat eat fish");
        }
        public void catchMouse(){
            System.out.println("catch Mouse");
        }
    }
    class Dog7 extends Animal7{
        public void eat(){
            System.out.println("Dog eat rou");
        }
        public void LookHome(){
            System.out.println("LookHome");
        }
    }
    View Code

     C.多态的弊端
      不能使用子类的特有属性和行为
    D.案例演示
      method(Animal a)
      method(Cat c)
    09.08 面向对象(多态的题目分析)
    09.09 面向对象(抽象类的概述机器特点)
     A.抽象类概述
      当你无法描述一个类时,就将她定义为抽象的。抽象就是看不懂的。抽象就是看不懂的(********)
     B.抽象类特点
      a.抽象类和抽象方法必须使用abstract关键字来修饰
        abstract class 类名{}
        public abstract void eat();
      b.抽象类不一定由抽象方法,有抽象方法的类一定是抽象类或者接口
      c.抽象类不能被实例化,那么抽象类如何实例化呢?
        按照多态的方式,由句体的子类实例化。其实这也是多态的一种,抽象类多态
      d.抽象类的子类
        要么抽象类
        要么是重写抽象类中所有抽象方法(一般选择这种方式)(**********)
     C.案例演示

    package day09;
    public class day09_09 {
        /*a.抽象类和抽象方法必须使用abstract关键字来修饰
              abstract class 类名{}
              public abstract void eat();
          b.抽象类不一定由抽象方法,有抽象方法的类一定是抽象类或者接口
          c.抽象类不能被实例化,那么抽象类如何实例化呢?
              按照多态的方式,由句体的子类实例化。其实这也是多态的一种,抽象类多态
          d.抽象类的子类
              要么抽象类
              要么是重写抽象类中所有抽象方法(一般我们这么使用)
         */
        public static void main(String[] args) {
        //    Animal9 a = new Animal9();           //抽象方法不能实例化
            //用父类引用指向子类对象来调用子类方法
            Animal9  a = new Cat9();
            a.eat();
        }
    }
    abstract class Animal9{             //抽象类
        public abstract void eat();     //抽象方法
    }
    class Cat9 extends Animal9{
        public void eat(){
            System.out.println("Cat eat fish");
        }
    }
    View Code

    09.10 面向对象(抽象类的成员特点)
     A.抽象类的成员特点
      a.成员变量:既可以是变量,也可以是常量。abstract不能修饰成员变量
      b.构造方法:有。用于子类访问父类数据的初始化
      c.成员方法:抽象,非抽象都可以
     B.案例特点

    09.10 面向对象(抽象类的成员特点)
      A.抽象类的成员特点
      a.成员变量:既可以是变量,也可以是常量。abstract不能修饰成员变量
      b.构造方法:有。用于子类访问父类数据的初始化
      c.成员方法:抽象,非抽象都可以
      B.案例特点

    09.10 面向对象(抽象类的成员特点)
      A.抽象类的成员特点
          a.成员变量:既可以是变量,也可以是常量。abstract不能修饰成员变量
          b.构造方法:有。用于子类访问父类数据的初始化
          c.成员方法:抽象,非抽象都可以
      B.案例特点
    09.11 面向对象(岳不群,东方不败)
    09.12 面向对象(猫狗类)
    09.13 面向对象(老师类)
    09.14 面向对象(员工类)
        假如我们再开发一个系统程序是需要堆程序员进行设计,程序员包括3个属性:姓名/工号/工资
           经理,除了含有程序员的属性外,还有一个奖金属性
          请使用继承的思想设计出程序员类和经理类。要求类中提供必要的方法进行属性访问*/
    09.15 面向对象(抽象类中的面试题)
         面试题:
         1.一个抽象类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?
             可以。这么做的目的只有一个,就是不让其他类创建本类对象,交给子类完成
         2.abstract不能和哪些关键字共存、、
             abstract和static/final,private
             static。被static修饰的可以用类名.调用,但是类名.调用抽象方法是没有意义的
             final。   被abstract修饰的方法强制子类重写,被final修饰的不让子类重写
             private.被abstract修饰的是为了让子类看到并强制重写
    09.16 面向对象(接口的概述及其特点)
      A.
      B.接口特点
          a:接口关键字:interface。 使用方式:   interface  接口名  {}
          b:类实现接口:implements 使用方法:  class 类名 implements 接口名 {}
          c:接口不能实例化。所以可以按照多态的方式进行实例化
          d:接口的子类:可以是抽象类(意义不大),可以是具体类,要重写接口中的所有抽象方法(********)
      C.案例演示
    09.17 面向对象(接口的成员特点)
      A.接口成员特点
          成员变量:只能是常量,并且是静态的公共的
              默认修饰符是:public static final
              建议:自己手动给出
          构造方法:无
          成员方法:只能是抽象方法
              建议:自己手动给出
     09.18 接口与接口,类 的关系
      A.类与类,类与接口,接口与接口
          a.类与类:       继承关系。只能单继承
          b.类与接口:   实现关系,单实现和多实现
          c.接口与接口:继承关系,单继承和多继承
     09.19 面向对象(抽象类和接口的区别)
      A.成员区别
          抽象类:
              成员变量:可以变量也可以常量
              构造方法:有
              成员方法:可以抽象,可以非抽象
          接口:
              成员变量:只能常量
              成员方法:只能抽象
      C.设计理念:
          抽象类:体现的是:“is a”
          接口 :   体现的是:“like a”
    09.20 面向对象(猫狗类)
     A.案例演示<猫狗类>
         动物类: 姓名 年龄 吃饭 睡觉
         猫和狗
         动物培训接口:跳高
    View Code

    09.11 面向对象(岳不群,东方不败)

    package day09;
    public class day09_11 {
        public static void main(String[] args) {
            岳不群 小岳子 = new 岳不群();
            小岳子.自宫();
        }
    }
    abstract class 葵花宝典{                   //抽象类
        public abstract void 自宫();            //定义抽象方法
    }
    class 岳不群 extends 葵花宝典{
        public void 自宫(){                    //必须重写父类的抽象方法
            System.out.println("用牙签");
        }
    }
    class 林平之 extends 葵花宝典{
        public void 自宫(){                    //必须重写父类的抽象方法
            System.out.println("用指甲刀");
        }
    }
    class 东风不败 extends 葵花宝典{
        public void 自宫(){                    //必须重写父类的抽象方法
            System.out.println("用锤子");
        }
    }
    View Code

    09.12 面向对象(猫狗类)

    package day09;
    public class day09_12 {
        public static void main(String[] args) {
            Cat12 c = new Cat12("加菲猫",80);
            System.out.println(c.getName() + "..." + c.getAge());
            c.eat();
            c.catchMouse();
            
            Dog12 d = new Dog12("八公",20);
            d.eat();
            d.LookHome();
        }
    }
    abstract class Animal12{
        private String name;
        private int age;
        //
        public Animal12(){}
        public Animal12(String name,int age){
            this.name = name;
            this.age = age;
        }
        //
        public String getName(){
            return name;
        }
        public void setName(String name){
            this.name =name;
        }
        public int getAge(){
            return age;
        }
        public void setAge(int age){
            this.age = age;
        }
        //
        public abstract void eat();              //抽象方法必须放在抽象类种
    } 
    class Cat12 extends Animal12{
        public Cat12(){}
        public Cat12(String name,int age){
            super(name,age);
        }
        public void eat(){                      //必须重写父类的抽象方法
            System.out.println("Cat eat");
        }
        public void catchMouse(){
            System.out.println("catch mouse");
        }
    }
    class Dog12 extends Animal12{
        public Dog12(){}
        public Dog12(String name,int age){
            super(name,age);
        }
        public void eat(){                      //必须重写父类的抽象方法
            System.out.println("dog eat rou");
        }
        public void LookHome(){
            System.out.println("look home");
        }
    }
    View Code

    09.13 面向对象(老师类)

    package day09;
    public class day09_13 {
        public static void main(String[] args) {
            BaseTeacher bt = new BaseTeacher("fengjia",18);
            bt.teach();
        }
    }
    abstract class Teacher{
        private String name;
        private int age;
        //
        public Teacher(){}
        public Teacher(String name,int age){
            this.name = name;
            this.age = age;
        }
        //
        public String getName(){
            return name;
        }
        public void setName(String name){
            this.name =name;
        }
        public int getAge(){
            return age;
        }
        public void setAge(int age){
            this.age = age;
        }
        public abstract void teach();
    }
    class BaseTeacher extends Teacher{
        public BaseTeacher(){}
        public BaseTeacher(String name,int age){
            super(name,age);
        }
        public void teach(){
            System.out.println("我的姓名是:"+ this.getName() + ",我的年龄是:"+ this.getAge()+",讲的内容是Java基础");
            
        }
    }
    View Code

    09.14 面向对象(员工类)
      假如我们再开发一个系统程序是需要堆程序员进行设计,程序员包括3个属性:姓名/工号/工资
      经理,除了含有程序员的属性外,还有一个奖金属性
      请使用继承的思想设计出程序员类和经理类。要求类中提供必要的方法进行属性访问*/

    package day09;
    public class day09_14 {
        public static void main(String[] args) {
            Coder c = new Coder("demaxiya",8,8000,5000);
            c.work();
        }
    }
    /*假如我们再开发一个系统程序是需要堆程序员进行设计,程序员包括3个属性:姓名/工号/工资
     * 经理,除了含有程序员的属性外,还有一个奖金属性
     * 请使用继承的思想设计出程序员类和经理类。要求类中提供必要的方法进行属性访问*/
    
    class Employee{
        private String name;
        private int id;
        private double salary;
        public Employee(){}
        public Employee(String name,int id,double salary){
            this.name = name;
            this.id = id;
            this.salary=salary;
        }
        //
        public String getName(){
            return name;
        }
        public void setName(String name){
            this.name =name;
        }
        public int getId(){
            return id;
        }
        public void setId(int id){
            this.id = id;
        }
        public double getSalary(){
            return salary;
        }
        public void setSalary(double salary){
            this.salary = salary;
        }
    }
    class Coder extends Employee{
        private int bonus;                //定义本类的成员变量
        public Coder(){}
        public Coder(String name,int id,double salary,int bonus){
            super(name,id,salary);
            this.bonus = bonus;            //this进行赋值
        }
        public void work(){
            System.out.println("我的姓名是:"+ this.getName() + ",我的工号是:"+this.getId()+",我的工资是:"+this.getSalary()+",我的奖金是:"+this.bonus);
        }
    }
    View Code

    09.15 面向对象(抽象类中的面试题)
      面试题:
      1.一个抽象类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?
        可以。这么做的目的只有一个,就是不让其他类创建本类对象,交给子类完成
      2.abstract不能和哪些关键字共存、、
        abstract和static/final,private
        static。被static修饰的可以用类名.调用,但是类名.调用抽象方法是没有意义的
        final。 被abstract修饰的方法强制子类重写,被final修饰的不让子类重写
        private.被abstract修饰的是为了让子类看到并强制重写

    package day09;
    
    public class day09_15 {
    
        /**
         面试题:
         1.一个抽象类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?
             可以。这么做的目的只有一个,就是不让其他类创建本类对象,交给子类完成
         2.abstract不能和哪些关键字共存、、
             abstract和static/final,private
             static。被static修饰的可以用类名.调用,但是类名.调用抽象方法是没有意义的
             final。   被abstract修饰的方法强制子类重写,被final修饰的不让子类重写
             private.被abstract修饰的是为了让子类看到并强制重写
         */
        public static void main(String[] args) {
    
        }
    }
    /*abstract class Demo{
        //public static abstract void print();//错误,这是不能共存的
        //public final abstract void print();//错误,这是不能共存的
        //private abstract void print();    /错误,这是不能共存的
    }*/
    View Code

    09.16 面向对象(接口的概述及其特点)
      A.
      B.接口特点
      a:接口关键字:interface。 使用方式: interface 接口名 {}
      b:类实现接口:implements 使用方法: class 类名 implements 接口名 {}
      c:接口不能实例化。所以可以按照多态的方式进行实例化
      d:接口的子类:可以是抽象类(意义不大),可以是具体类,要重写接口中的所有抽象方法(********)
     C.案例演示

    09.17 面向对象(接口的成员特点)
      A.接口成员特点
      成员变量:只能是常量,并且是静态的公共的
        默认修饰符是:public static final
        建议:自己手动给出
      构造方法:无
      成员方法:只能是抽象方法
        建议:自己手动给出
    09.18 接口与接口,类 的关系
      A.类与类,类与接口,接口与接口
      a.类与类: 继承关系。只能单继承
      b.类与接口: 实现关系,单实现和多实现
      c.接口与接口:继承关系,单继承和多继承

    package day09;
    public class day09_18 {
        public static void main(String[] args) {
    
        }
    }
    interface InterA{
        public abstract void printA();
    }
    interface InterB{
        public abstract void printB();
    }
    class Demo18 implements InterA{
        public void printA(){
            System.out.println("printA");
        }
        public void printB(){
            System.out.println("printB");
        }
    }
    View Code

    09.19 面向对象(抽象类和接口的区别)
      A.成员区别
      抽象类:
        成员变量:可以变量也可以常量
      构造方法:有
      成员方法:可以抽象,可以非抽象
      接口:
        成员变量:只能常量
      成员方法:只能抽象
      C.设计理念:
      抽象类:体现的是:“is a”
      接口 : 体现的是:“like a”
    09.20 面向对象(猫狗类)
      A.案例演示<猫狗类>
      动物类: 姓名 年龄 吃饭 睡觉
      猫和狗
      动物培训接口:跳高

    package day09;
    public class day09_20 {
        public static void main(String[] args) {
            Cat20 c = new Cat20("加菲猫",20);
            c.eat();
            c.sleep();
            System.out.println("-------------------");
            JumpCat jc = new JumpCat("调高猫",30);
            jc.eat();
            jc.sleep();
            jc.jump();
        }
    }
    /*A.案例演示<猫狗类>
        动物类: 姓名 年龄 吃饭 睡觉
        猫和狗
        动物培训接口:调高*/
    abstract class Animal20{
        private String name;
        private int age;
    
        public Animal20(){}
        public Animal20(String name,int age){
            this.name = name;
            this.age = age;
        }
    
        public String getName(){
            return name;
        }
        public void setName(String name){
            this.name =name;
        }
        public int getAge(){
            return age;
        }
        public void setAge(int age){
            this.age = age;
        }
        
        public abstract void eat();              //1.抽象方法必须放在抽象类种
        public abstract void sleep();  
    } 
    
    interface Jumping{                        //实现一个接口
        public void jump();
    }
    //用猫继承动物
    class Cat20 extends Animal20{
        public Cat20(){}
        public Cat20(String name,int age){
            super(name,age);
        }
        
        public void eat(){                      //2.必须重写父类的抽象方法
            System.out.println("Cat eat");
        }
        public void sleep(){
            System.out.println("sleep");
        }
    }
    
    //跳猫JumpCat先继承Cat20后继续Jumping 
    class JumpCat extends Cat20 implements Jumping{
        public JumpCat(){}
        public JumpCat(String name,int age){
            super(name,age);
        }
        
        public void jump(){                    //3.必须重写 接口中的方法
            System.out.println("猫跳高");
        }
    }
    View Code
  • 相关阅读:
    工作总结系列---【端口被占用,如何取消端口进程】
    封装工具系列---【封装H5页面管理机构和证件类型下拉框数据处理的方法】
    工作总结系列---【vue页面实现导出表格效果】
    vscode---【内网开发下,离线安装vscode插件vsix文件】
    工作总结系列---【IDE深色背景下,鼠标移动也变成黑色,看不清怎么解决???】
    node系列---【为什么要设置镜像源?怎么配置?】
    git系列---【如何在本地修改别人的代码图解】
    git系列---【git如何回退到上一个版本??】
    封装工具系列---【补零操作】
    封装的各类工具系列---【时间格式化为YYYY-MM-DD格式 】
  • 原文地址:https://www.cnblogs.com/chengxiaofeng/p/10394890.html
Copyright © 2020-2023  润新知