Java面向对象编程(封装/继承/多态)实例解析
作者:书思BookReflect 发布时间:2023-11-11 11:33:09
标签:java,面向对象
本文主要介绍了面向对象的三大特征实例解析,下面看看具体内容。
封装
封装一个Teacher和Student类
package com.hz.test;
public class Teacher {
private String name;
private String majorDirection;
private String teachCourse;
private int teachAge;
public Teacher() {
super();
}
public Teacher(String name,String majorDirection,String teachCourse,int teachAge) {
this.name = name;
this.majorDirection = majorDirection;
this.teachCourse = teachCourse;
this.teachAge = teachAge;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMajorDirection() {
return majorDirection;
}
public void setMajorDirection(String majorDirection) {
this.majorDirection = majorDirection;
}
public String getTeachCourse() {
return teachCourse;
}
public void setTeachCourse(String teachCourse) {
this.teachCourse = teachCourse;
}
public int getTeachAge() {
return teachAge;
}
public void setTeachAge(int teachAge) {
this.teachAge = teachAge;
}
public String toString() {
return "姓名=" + getName() + ", 专业方向=" + getMajorDirection()
+ ", 所教课程=" + getTeachCourse() + ", 教龄=" + getTeachAge();
}
}
Student类
package com.hz.test;
import java.util.Arrays;
/**
* @author ztw
*
*/
public class Student {
private String name;
private int age;
private String[] courses;
private String interest;
public Student() {
super();
}
public Student(String name,int age,String[] courses,String interest) {
this.name = name;
this.age = age;
this.courses = courses;
this.interest = interest;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setAge(int age){
if(age<0){
System.out.println("年龄不能为负值");
}else{
this.age = age;
}
}
public int getAge(){
return age;
}
public void setCourses(String[] courses){
this.courses = courses;
}
public String getCourses(){
return Arrays.toString(courses);
}
public void setInterest(String interest){
this.interest = interest;
}
public String getInterest(){
return interest;
}
public String toString() {
return "姓名=" + getName() + ", 年龄=" + getAge() + ", 课程=" + getCourses()
+ ", 兴趣=" + getInterest();
}
}
测试类
package com.hz.test;
public class Test {
public static void main(String[] args) {
String arr[] = {"阿斯达","是的","大概","太诱惑"};
Student stu = new Student("张三",21,arr,"打球");
Teacher tea = new Teacher("王五","阿斯达","阿斯达",99);
System.out.println(stu);
System.out.println(tea);
}
}
输出结果:
姓名=张三, 年龄=21, 课程=[阿斯达, 是的, 大概, 太诱惑], 兴趣=打球
姓名=王五, 专业方向=阿斯达, 所教课程=阿斯达, 教龄=99
继承
定义Play,TaoistPriest,Master,Warrior
public class Play {
String main;
public Play(String main) {
this.main = main;
}
public void hitMonster() {
System.out.println(main+"打怪");
}
}
/**
* TaoistPriest:道士
* @author ztw
*
*/
public class TaoistPriest extends Play {
{
System.out.print("我是道士:");
}
public TaoistPriest(String main) {
super(main);
}
}
/**
* Master:法师
* @author ztw
*
*/
public class Master extends Play{
{
System.out.print("我是法师:");
}
public Master(String main) {
super(main);
}
}
/**
* Warrior:武士
* @author ztw
*
*/
public class Warrior extends Play{
{
System.out.print("我是武士:");
}
public Warrior(String main) {
super(main);
}
}
测试类
public class Test {
public static void main(String[] args) {
TaoistPriest tp = new TaoistPriest("灵魂火符");
tp.hitMonster();
Master m = new Master("雷电术");
m.hitMonster();
Warrior w = new Warrior("烈火术");
w.hitMonster();
}
}
输出结果:
我是道士:灵魂火符打怪
我是法师:雷电术打怪
我是武士:烈火术打怪
多态
服务器,客户端交互
LoginListener
public interface LoginListener {
public void succeed(String msg);
public void failed(String msg);
}
MyLoginListener
public class MyLoginListener implements LoginListener{
public void succeed(String msg) {
System.out.println(msg);
}
public void failed(String msg) {
System.out.println(msg);
}
}
Server
public class Server {
public void login(String userName,String password,LoginListener listener) {
System.out.print("loading");
for (int i = 0; i < 10; i++) {
try {
Thread.sleep(100*i);
System.out.print(".");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(userName.equals("zhangsan") && password.equals("123")){
if(listener!=null){
listener.succeed("登录成功");
}
}else{
if(listener!=null){
listener.succeed("登录失败");
}
}
}
}
测试类
public class LoginTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名:");
String userName = sc.next();
System.out.println("请输入用户密码:");
String password = sc.next();
Server server = new Server();
server.login(userName, password, new MyLoginListener());
}
}
输出结果
请输入用户名:
zhangsan
请输入用户密码:
123
loading……….登录成功
来源:http://blog.csdn.net/qq_33624284/article/details/53606306


猜你喜欢
- 安卓的开发从布局开始。安卓的界面编写也是使用xml进行布局的,一般如果熟悉了html界面的布局,那么很容易就能够理解安卓有关的布局了,这里介
- 对网页中各种不同格式的发布时间进行抽取,将发布时间以规整的“yyyy-MM-dd HH:mm:ss”格式表示出来,只能尽量追求精确,但是因为
- 需求winForm 程序输出类型为 windows 程序(不是命令行程序)在运行时想输入一些信息编译开发调试,如何实现这一功能解答:Allo
- JetpackJetpack,我觉得翻译为“飞行器”更好听,因为Google针对编程历史乱象,整理出
- 1. Spring ProfileSpring可使用Profile绝对程序在不同环境下执行情况,包含配置、加载Bean、依赖等。 Sprin
- using System; using System.IO; namespace DelAllLrcFiles { class Progra
- 项目需求需要生成一个PDF文档,使用的是VS2010,ASP.NET。网络上多次搜索没有自己想要的,于是硬着头皮到itextpdf官网看英文
- 我们有时用C#需要实现锁住文件的功能,该如何锁住文件呢?下面小编给大家介绍一下。首先大家需要到码云里面找到如下图所示的文件锁的项目,如下图所
- 一、Code First 代码优先DbContext可以用于数据库优先,代码优先和模型优先的开发。DbContext主要包含一组非常易于使用
- 在 Android 加载图片一般使用 ImageView,这里简单记录一下这个控件的使用方法。最简单就是在 xml 里直接使用 ImageV
- 其实项目网上有很多了,但是教程比较详细的没多少,今天分享的项目从安装部署到代码具体功能都有很详细都说明eladmin 是一款基于 Sprin
- 缘起:利用 ContentProvider 来初始化你的 Library, 这个相信大家已经不太陌生了,下面简要说下。1. 利用 Conte
- Java的NIO中的管道,就类似于实际中的管道,有两端,一段作为输入,一段作为输出。也就是说,在创建了一个管道后,既可以对管道进行写,也可以
- android绘制圆形图片的两种方式看下效果先下面有完整的示例代码使用BitmapShader(着色器)我们在绘制view 的时候 就是小学
- 在Java中经常会涉及到对象数组的排序问题,那么就涉及到对象之间的比较问题。通常对象之间的比较可以从两个方面去看:第一个方面:对象的地址是否
- 一、顺序结构程序的执行和代码的执行顺序有关,如果调整代码的书写顺序, 则执行顺序也发生变化二、分支结构基本语法形式1:if(布尔表达式){
- 1、数组的定义先声明后使用数据类型 [] 数组名称 = new 数据类型[长度];String[] arr3 = new String[5]
- 前言 最近利用空闲时间学习了自定义View的一些知识,为了巩固,写了一个小东西,顺便分享出来,下面话不多说了,来一起看看详细的介绍吧。简介
- 引导要求:线程资源必须通过线程池提供,不允许在应用自行显式创建线程;说明:使用线程池的好处是减少在创建和销毁线程上所花的时间以及系统资源的开
- 本文实例讲述了C#使用foreach语句简单遍历数组的方法。分享给大家供大家参考。具体如下:using System;public clas