JavaSE学习day09(面向对象-多态&抽象&类&接口)

###09.01_面向对象(多态的概述及其代码体现)

  • A:多态(polymorphic)概述
  • 事物存在的多种形态
  • B:多态前提
  • a:要有继承关系。
  • b:要有方法重写。
  • c:要有父类引用指向子类对象。
  • C:案例演示
  • 代码体现多态

###09.02_面向对象(多态中的成员访问特点之成员变量)

  • 成员变量
  • 编译看左边(父类),运行看左边(父类)。

###09.03_面向对象(多态中的成员访问特点之成员方法)

  • 成员方法
  • 编译看左边(父类),运行看右边(子类)。

###09.04_面向对象(多态中的成员访问特点之静态成员方法)

  • 静态方法
  • 编译看左边(父类),运行看左边(父类)。
  • (静态和类相关,算不上重写,所以,访问还是左边的)
  • 只有非静态的成员方法,编译看左边,运行看右边

###09.06_面向对象(多态中向上转型和向下转型)

  • A:案例演示
  • 多态中向上转型和向下转型
Person p = new SuperMan();向上转型
SuperMan sm = (SuperMan)p;向下转型

###09.07_面向对象(多态的好处和弊端)

  • A:多态的好处
  • a:提高了代码的维护性(继承保证)
  • b:提高了代码的扩展性(由多态保证)
  • B:案例演示
  • 多态的好处
  • 可以当作形式参数,可以接收任意子类对象
  • C:多态的弊端
  • 不能使用子类的特有属性和行为。
  • D:案例演示

    method(Animal a)
    
    method(Cat c)
    

###09.08_面向对象(多态中的题目分析题)

  • A:看下面程序是否有问题,如果没有,说出结果

  •   class Fu {
      	public void show() {
      		System.out.println("fu show");
      	}
      }
    
      class Zi extends Fu {
      	public void show() {
      		System.out.println("zi show");
      	}
    
      	public void method() {
      		System.out.println("zi method");
      	}
      }
    
      class Test1Demo {
      	public static void main(String[] args) {
      		Fu f = new Zi();
      		f.method();
      		f.show();
      	}
      }
    
  • B:看下面程序是否有问题,如果没有,说出结果

  •   class A {
      	public void show() {
      		show2();
      	}
      	public void show2() {
      		System.out.println("我");
      	}
      }
      class B extends A {
      	public void show2() {
      		System.out.println("爱");
      	}
      }
      class C extends B {
      	public void show() {
      		super.show();
      	}
      	public void show2() {
      		System.out.println("你");
      	}
      }
      public class Test2DuoTai {
      	public static void main(String[] args) {
      		A a = new B();
      		a.show();
      		
      		B b = new C();
      		b.show();
      	}
      }
    

###09.09_面向对象(抽象类的概述及其特点)

  • A:抽象类概述

    • 抽象就是看不懂的
  • B:抽象类特点

  • a:抽象类和抽象方法必须用abstract关键字修饰
	 abstract class 类名 {}
	 public abstract void eat();
  • b:抽象类不一定有抽象方法,有抽象方法的类一定是抽象类或者是接口
  • c:抽象类不能实例化那么,抽象类如何实例化呢?
    • 按照多态的方式,由具体的子类实例化。其实这也是多态的一种,抽象类多态。
  • d:抽象类的子类
    • 要么是抽象类
    • 要么重写抽象类中的所有抽象方法
  • C:抽象类特点B:抽象类特点
  • a:抽象类和抽象方法必须用abstract关键字修饰
	* abstract class 类名 {}
	* public abstract void eat();
  • b:抽象类不一定有抽象方法,有抽象方法的类一定是抽象类或者是接口
  • c:抽象类不能实例化那么,抽象类如何实例化呢?
    • 按照多态的方式,由具体的子类实例化。其实这也是多态的一种,抽象类多态。
  • d:抽象类的子类
    • 要么是抽象类
    • 要么重写抽象类中的所有抽象方法

###09.10_面向对象(抽象类的成员特点)

  • A:抽象类的成员特点
  • a:成员变量:既可以是变量,也可以是常量。abstract是否可以修饰成员变量?不能修饰成员变量
  • b:构造方法:有。
    • 用于子类访问父类数据的初始化。
  • c:成员方法:既可以是抽象的,也可以是非抽象的。
  • B:案例演示
  • 抽象类的成员特点
  • C:抽象类的成员方法特性:
  • a:抽象方法 强制要求子类做的事情。
  • b:非抽象方法 子类继承的事情,提高代码复用性。

###09.12_面向对象(抽象类练习猫狗案例)

  • A:案例演示
  • 具体事物:猫,狗
  • 共性:姓名,年龄,吃饭
  • 猫的特性:抓老鼠
  • 狗的特性:看家

###09.13_面向对象(抽象类练习老师案例)

  • A:案例演示
  • 具体事物:基础班老师,就业班老师
  • 共性:姓名,年龄,讲课。
  • 具体事物:基础班学生,就业班学生
  • 共性:姓名,年龄,学习

###09.14_面向对象(抽象类练习员工案例)

  • A:案例演示
  • 假如我们在开发一个系统时需要对程序员类进行设计,程序员包含3个属性:姓名、工号以及工资。
  • 经理,除了含有程序员的属性外,另为还有一个奖金属性。
  • 请使用继承的思想设计出程序员类和经理类。要求类中提供必要的方法进行属性访问。

###09.15_面向对象(抽象类中的面试题)

  • A:面试题1
  • 一个抽象类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?
  • 可以
  • 这么做目的只有一个,就是不让其他类创建本类对象,交给子类完成
  • B:面试题2:abstract不能和哪些关键字共存
  • abstract和static
    *被abstract的方法没有方法体
    *被static修饰的可以类名.调用,但是类名.调用抽象方法是没有意义的
  • abstract和final
    *被abstract修饰的方法强制子类重写
    *被final修饰的不让子类重写,所以它两矛盾
  • abstract和private
    *被abstract修饰的是为了让子类看到并强制重写
    *被private修饰的不让子类访问,所以它两是矛盾的

###09.16_面向对象(接口的概述及其特点)

  • A:接口概述
  • 从狭义的角度讲就是指java中的interface
  • 从广义的角度讲对外提供规则的都是接口
  • B:接口特点
  • a:接口用关键字interface表示
	 interface 接口名 {}
  • b:类实现接口用implements表示
	 class 类名 implements 接口名 {}
  • c:接口不能实例化
    • 那么,接口如何实例化呢?
    • 按照多态的方式来实例化。
  • d:接口的子类
    • a:可以是抽象类。但是意义不大。
    • b:可以是具体类。要重写接口中的所有抽象方法。(推荐方案)
  • C:案例演示
  • 接口特点

###09.17_面向对象(接口的成员特点)

  • A:接口成员特点
  • 成员变量;只能是常量,并且是静态的并公共的。
    • 默认修饰符:public static final
    • 建议:自己手动给出。
  • 构造方法:接口没有构造方法。
  • 成员方法:只能是抽象方法。
    • 默认修饰符:public abstract
    • 建议:自己手动给出。
  • B:案例演示
  • 接口成员特点

###09.18_面向对象(类与类,类与接口,接口与接口的关系)

  • A:类与类,类与接口,接口与接口的关系
  • a:类与类:
    • 继承关系,只能单继承,可以多层继承。
  • b:类与接口:
    • 实现关系,可以单实现,也可以多实现。
    • 并且还可以在继承一个类的同时实现多个接口。
  • c:接口与接口:
    • 继承关系,可以单继承,也可以多继承。
  • B:案例演示
  • 类与类,类与接口,接口与接口的关系

###09.19_面向对象(抽象类和接口的区别)

  • A:成员区别
  • 抽象类:
    • 成员变量:可以变量,也可以常量
    • 构造方法:有
    • 成员方法:可以抽象,也可以非抽象
  • 接口:
    • 成员变量:只可以常量
    • 成员方法:只可以抽象
  • B:关系区别
  • 类与类
    • 继承,单继承
  • 类与接口
    • 实现,单实现,多实现
  • 接口与接口
    • 继承,单继承,多继承
  • C:设计理念区别
  • 抽象类 被继承体现的是:”is a”的关系。抽象类中定义的是该继承体系的共性功能。
  • 接口 被实现体现的是:”like a”的关系。接口中定义的是该继承体系的扩展功能。

###09.20_面向对象(猫狗案例加入跳高功能分析及其代码实现)

  • A:案例演示
  • 动物类:姓名,年龄,吃饭,睡觉。
  • 猫和狗
  • 动物培训接口:跳高

public class Main {
   public static void main(String[] args){
      Animal miao = new Cat("加菲",8);
      miao.eat();
      miao.sleep();
      ((Cat) miao).jump();

      Dog wang = new Dog("小刀",10);
      wang.eat();
      wang.sleep();
      wang.jump();
   }
}

abstract class Animal{
   private String name;
   private int age;

   public Animal(){}

   public Animal(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;
   }

   public abstract void eat();

   public abstract void sleep();
}

class Cat extends Animal implements Study{
   public Cat(){}

   public Cat(String name,int age){
      super(name,age);
   }

   public void eat() {
      System.out.println(this.getName()+this.getAge()+"猫吃饭");
   }

   public void sleep() {
      System.out.println(this.getName()+this.getAge()+"猫睡觉");
   }

   public void jump() {
      System.out.println("猫跳高");
   }
}

class Dog extends Animal implements Study{
   public Dog(){}

   public Dog(String name,int age){
      super(name,age);
   }

   public void eat() {
      System.out.println(this.getName()+this.getAge()+"狗吃饭");
   }

   public void sleep() {
      System.out.println(this.getName()+this.getAge()+"狗睡觉");
   }

   public void jump() {
      System.out.println("狗跳高");
   }
}

interface Study{
   public abstract void jump();
}







  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
面向对象编程是一种编程范式,它将程序的构建和设计思路以面向对象的方式进行组织和实现。在Java中,面向对象编程是基于Java SE(Standard Edition)的一种编程方式。第07讲主要介绍了面向对象编程中的一些基本概念和关键术语。 在面向对象编程中,我们将程序中的数据和对数据的操作(方法)封装在一起,形成一个对象。对象由两部分构成:属性和方法。属性是用来描述对象的特征,而方法则是对象可以执行的操作。对象之间通过消息(方法调用)进行通信和交互。面向对象的核心思想是通过封装、继承和多态实现程序的复用和扩展。 封装是面向对象编程中的一个重要概念,它指的是将的属性和方法进行封装,使得外部无法直接访问和修改对象的内部状态,只能通过公共的方法来操作属性和执行方法。封装提供了一种将数据和行为组合在一起的方式,可以保护数据的完整性和安全性。 继承是面向对象编程中的另一个重要概念,它指的是通过定义一个新的来继承现有的属性和方法。通过继承,子可以继承父的属性和方法,并可以在此基础上进行扩展和修改。继承提供了一种代码复用的机制,可以减少重复编码的工作量。 多态面向对象编程的又一个重要概念,它指的是同一型的对象在不同的情况下可以有不同的表现形式。多态通过方法的重写和方法的重载实现。方法的重写指的是在子中重新定义和实现父的方法,方法的重载指的是在同一个中可以定义多个同名但参数列表不同的方法。 总结来说,面向对象编程是一种将程序组织和设计思路以对象为中心的编程方式。在JavaSE中,我们可以通过封装、继承和多态来实现面向对象编程的目标。封装可以提高程序的可维护性和可复用性,继承可以减少重复编码的工作量,多态可以灵活地操作对象。掌握这些基本概念和关键术语,可以帮助我们更好地理解和应用面向对象编程的思想。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值