重学JAVA基础(五):面向对象

1.封装

import java.util.Date;

public class Human {

    protected String name;

    protected BirthDay birthDay;

    protected String sex;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public BirthDay getBirthDay() {
        return birthDay;
    }

    public void setBirthDay(BirthDay birthDay) {
        this.birthDay = birthDay;
    }

    public int getAge(){//封装方法
        if(birthDay!=null){
            Date nowDate = new Date(System.currentTimeMillis());
            int year = nowDate.getYear()+1900;
            int month = nowDate.getMonth()+1;
            int day = nowDate.getDate();
            int age = year - this.birthDay.getYear();
            if(this.birthDay.getMonth()>month){
                return age-1;
            }else if(this.birthDay.getMonth()==month){
                if(this.birthDay.getDay()>=day){
                    return age-1;
                }
            }
            return age;
        }
        return 0;
    }

    public String toString(){
        return "name:"+name+" sex:"+sex+" age:"+getAge();
    }

    public String toString(Human human){
        return this+"";
    }

    public Human(){

    }
    public Human(String name,String sex) {
        super();
        this.name = name;
        this.sex = sex;
    }

    public Human(String sex) {
        super();
        this.sex = sex;
    }
    public Human(String name,String sex,int year,int month,int day) {
        super();
        this.name = name;
        this.birthDay = new BirthDay(year, month, day);
        this.sex = sex;
    }

}
public class BirthDay {

    private int year;

    private int month;

    private int day;

    public int getYear() {
        return year;
    }

    public void setYear(int year) {
        this.year = year;
    }

    public int getMonth() {
        return month;
    }

    public void setMonth(int month) {
        this.month = month;
    }

    public int getDay() {
        return day;
    }

    public void setDay(int day) {
        this.day = day;
    }

    public BirthDay(){

    }

    public BirthDay(int year, int month, int day) {
        super();
        this.year = year;
        this.month = month;
        this.day = day;
    }

}

2.继承

public class Woman extends Human{

    public Woman(){
        super("Woman");
    }

    public Woman(String name){
        super(name,"Woman");
    }

    public String toString(){
        return " I am Woman,"+super.toString();
    }

    public String toString(Woman woman){
        return woman+"";
    }
}
public class Man extends Human{

    public Man(){
        super("Man");
    }

    public Man(String name){
        super(name,"Man");
    }

    public String toString(){
        return " I am Man,"+super.toString();
    }

    public String toString(Man man){
        return man+"";
    }

}

3.多态

public class TestOO {

    public static void main(String[] args) {
        Human man = new Man("man");
        Human woman = new Woman("woman");
        System.out.println(woman.toString(man));
        System.out.println(man.toString(woman));
    }
}

运行结果:

 I am Woman,name:woman sex:Woman age:0
 I am Man,name:man sex:Man age:0
时间: 2024-08-13 18:31:45

重学JAVA基础(五):面向对象的相关文章

重学JAVA基础(八):锁的基本知识

1.线程状态 如上图,当我们新建一个线程,并start后,其实不一定会马上执行,因为只有操作系统调度了我们的线程,才能真正进行执行,而操作系统也随时可以运行其他线程,这时线程又回到可运行状态.这个过程是操作系统控制的,不是我们能控制的.我们能控制的是将线程变为blocked,并从blocked变为runable状态. 在以前实验的wait和notify中,我当时并没有注意到notify后会进行锁阶段,以为notify后直接进入runable状态,等待操作系统调度.  从上面的图中可以看到,我们n

重学JAVA基础(一):PATH和CLASSPATH

我想大多数Java初学者都会遇到的问题,那就是怎么配置环境,执行java -jar xxx.jar  都会报NoClassDefFindError,我在最开始学习的时候,也遇到了这些问题. 1.PATH path是路径的意思,我们直接在控制台运行一个程序时候,系统都会在指定的path下去找有没有这个程序,如果有就执行,没有就报错或者提示. 在windows系统中,使用echo %PATH%来查看PATH下的路径 在linux系统中,使用 echo $PATH 我们将java的bin目录加入pat

重学JAVA基础(二):Java反射

看一下百度的解释: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息    以及动态调用对象的方法的功能称为java语言的反射机制. 先看一下一个例子: 这是最简单的反射使用方法,通过反射来调用类的方法. 下面通过一个需求来做反射实验:有3种人类(黄,白,黑),分别继承于Human类,都有人类的共同操作Behaviour /** * 行为,区别于动物 * @author tomsnail *

重学JAVA基础(三):动态代理

1.接口 public interface Hello { public void sayHello(); } 2.实例类 public class Hello2 { public void sayHello() { System.out.println("hello world2!"); } } public class Hello3 extends Hello2{ } public class HelloImpl implements Hello{ @Override public

重学JAVA基础(七):线程的wait、notify、notifyAll、sleep

/** * 测试thread的wait notify notifyAll sleep Interrupted * @author tomsnail * @date 2015年4月20日 下午3:20:44 */ public class Test1 { /** * 对象锁 * @author tomsnail * @date 2015年4月20日 下午3:14:13 */ private static final Object lockObject = new Object(); /** * 等

重学JAVA基础(四):线程的创建与执行

1.继承Thread public class TestThread extends Thread{ public void run(){ System.out.println(Thread.currentThread().getName()); } public static void main(String[] args) { Thread t = new TestThread(); t.start(); } } 2.实现Runnable public class TestRunnable

重学JAVA基础(六):多线程的同步

1.synchronized关键字 /** * 同步关键字 * @author tomsnail * @date 2015年4月18日 下午12:12:39 */ public class SyncThreadTest { private static final byte[] lock = new byte[1]; /** * 同步方法 * @author tomsnail * @date 2015年4月18日 下午12:15:30 */ public synchronized void te

Java基础和面向对象

Java基础和面向对象 一.数据类型和运算符 标识符 组成:字母.数字.下划线.$ 首字母:不能是数字 见名知义 不能是关键字(48个) 正确的:name.name123.age._name.$name 错误的:1name.public.123.na%me 标识符主要给一个元素起名字,需要符合起名字的以上4种规则.比如说,类的名字:首字母大写:变量名称:小写:方法名称:驼峰命名:数组名称.接口名称.集合名称. //你定义为汉字也可以,不过不推荐,因为国际语言以English为主.为了面向世界,使

重学Java(一):与《Java编程思想》的不解之缘

说起来非常惭愧,我在 2008 年的时候就接触了 Java,但一直到现在(2018 年 10 月 10 日),基础知识依然非常薄弱.用一句话自嘲就是:十年 IT 老兵,Java 菜鸡一枚. 于是,我想,不如静下心来,重新读一遍那些经典的 Java 技术书,并且没读完一章就输出一篇原创技术文章.从哪一本开始呢?想了一想,还是从<Java 编程思想>开始吧!毕竟这本书赢得了全球程序员的广泛赞誉,从 Java 的基础语法到最高级特性,都能指导我们 Java 程序员轻松掌握. 记得刚上大学那会,就买了