1 Javase第六课:OOP特性继承多态
1.1 回顾 :
- 面向对象 java:OOP , 面向过程C ;二者区别大家要简单的了解一下;
- 类(相同属性和行为的对象的集合),对象(现实世界存在的可以被描述的事物), 类是对象的类型,对象是类的实例;
- 如何从一个类得到一个对象? 类名 对象名 = new 类名(参数);
- 类的基本结构:
Public class 类名{
//类名字要怎么命名? 每个单词的首字母大写 Student/StudentScore
//常见的 属性和方法
// 静态的代码段,普通的代码段,…..
}
类的修饰符? Public ,默认,不能为private
- 属性:
属性也称为类的成员,是有默认值; 全局的变量;- 方法的定义
参数和返回值来匹配:
- 封装:
将类内部的一些细节隐藏起来;保护内部数据的方式; 将属性私有化,提供公共的方法来访问私有的属性,可以在公共方法中(setter getter)中加入一些存(setter) 取(getter)的限制;
- 方法的重载:
在同一个类中,方法名相同,参数项不同; 方法名复用,多态的一种表现形式;
- 构造方法:
无返回类型 方法名和类名相同
当我们使用new 创建一个对象的时候,会自动调用构造方法;
初始化对象,同时可以给属性赋值;
1.2 作业讲解
课后作业:
1. 定义一个管理员类:
•显示管理员信息的方法:返回管理员用户名和密码的信息;toString
•验证用户密码的方法:传入用户名和密码的参数,返回布尔类型,用户名和密码是否正确。
•编写一个测试类,创建一个管理员类对象,初始化设置用户名和密码,控制台接收用户输入的用户名和密码,调用验证的方法,显示是否登录成功。
package test;
public class Admin {
private String userName;
private String userPwd;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPwd() {
return userPwd;
}
public void setUserPwd(String userPwd) {
this.userPwd = userPwd;
}
public String getInfo() {
return userName + "," + userPwd;
}
@Override
public String toString() {
return "Admin [userName=" + userName + ", userPwd=" + userPwd + "]";
}
/**
* 用户登录(验证用户名和密码的方法)
*
* @param name
* 用户名
* @param pwd
* 密码
* @return true 验证通过 false 验证不通过
*/
public boolean login(String name, String pwd) {
if (name.equals(userName) && pwd.equals(userPwd)) {
return true;
}
return false;
}
}
package test;
import java.util.Scanner;
public class TestAdmin {
public static void main(String[] args) {
// TODO Auto-generated method stub
Admin admin = new Admin();
// 调用setter方法,初始化用户名和密码s
admin.setUserName("老王");
admin.setUserPwd("123456");
System.out.println("请输入用户名和密码");
// 接收
Scanner input = new Scanner(System.in);
String name = input.nextLine();
String pwd = input.nextLine();
// 调用admin对象的login的方法
boolean flag = admin.login(name, pwd);
if (flag) {
System.out.println("验证通过");
// 此处输出admin调用的是toString
System.out.println(admin);
} else {
System.out.println("验证没有通过,用户名或者密码错误");
}
}
}
- 自定义方法,判断一个数字是否是质数,要求有参数(要判断的数字是几 int n)有返回值(是否是质数 boolean)。
- 自定义方法,判断一个字符串是否是回文,要求有参数(参数就是一个字符串)无返回值(方法中直接输出结果)。
- 定义一个方法,模拟鸡叫声三种方法实现(重载) ; 自由发挥;
- 定义一个动物园,有很多动物,动物园动物可以进行表演。要求:使用重载和构造;
- 自定义类和对象,描述两个人吵架。
1.3 面向对象特征
1.3.1 抽象
1.3.2 封装
1.3.3 继承
1.java中,若两个类 满足A is B(A是B),那么可以理解成A继承B,大学生(A)是学生(B)吗,认为大学生继承学生类,此时大学生称为子类(派生类),学生类称为父类(基类)
2.实现继承:关键字:extends—>class A extends B ,A–子类 B–父类
子类可以继承父类的所有公开的属性和方法,但是构造方法不能被继承
java中的类之间只能支持单继承,一个类只能有一个直接的父类,但是可以多层继承(A继承B,B继承C)
父类更通用,子类更具体,子类不仅可以继承父类的公有属性和方法,还可以拓展自己的属性和方法
含义:发生在继承关系的子类中,在子类的某个方法, 方法的修饰符,返回值类型,方法名,参数列表和父类的某一个方法完全一样,称为方法的重写.
问题: 自定义一个类的时候,可以调用一个方法toString,这个方法是从Object继承而来; java.lang.Object
1.3.4 关于继承中对象的创建:
继承中对象和引用关系
父类:
子类
测试类:
父类对象不能强制转换为子类的引用:
1.3.5 构造方法的调用顺序:
创建子类对象的时候,会调用子类和父类的构造,默认调用的是子类和父类的无参数的构造,而且,父类的无参数的构造先执行.
Super必须出现在构造方法中的第一行位置.
1.3.6 课堂练习:
模拟课堂上课:大洋(JavaTeacher)来了,我们开始上正经的java课程;娜姐(Driver)来了,我们就开始开车;骥骁(OldDriver)来了,我们就上职业素养课,飙车. 参考代码请见(day07-多态)
1.3.7 多态
同一个方法;
对于不同的对象, JavaTeacher的对象,Driver的对象,OldDriver的对象; 执行过程和结果可能是不同的; 多态;
多态的实现方式: 使用继承 ;
操作步骤: 创建父类;创建子类,重写父类的方法;特定场景中,将父类引用作为参数;实际参数为子类对象;执行的过程和结果和子类对象有关;
不同的对象,对于同一个消息的执行(方法的执行)过程和响应是不同的.
将父类作为一个方法的参数,此时的形式参数,定义方法的时候,并不确定这个参数的实际对象; jt.teach() ;看起来是父引用的那个方法名
实际调用的时候,传递的参数为子类的对象;当我们的代码执行的过程中; jt.teach()的执行,实际上是子类特定的某个对象的方法;
这节Java课程主要讲解了面向对象的特性,包括抽象、封装、继承和多态。在继承中,讨论了子类如何扩展父类的属性和方法,以及构造方法的调用顺序。此外,还通过课堂练习强调了多态的概念,即同一个方法在不同对象上的执行可能有不同的结果。
2085

被折叠的 条评论
为什么被折叠?



