java SE 面向对象(1):面向对象三大特性

来源:互联网 发布:复制淘宝口令打不开 编辑:程序博客网 时间:2024/05/16 19:04

今天第一天写文章,肯定是先写基础的。但是先写哪儿的基础呢,想来想去肯定是要先面向对象部分的。

先介绍一下java面向对象的三大特性:

1.封装

先看个例子:

public class Test {public static void main(String[] args) {//创建一个对象Student zhangsan = new Student();/*zhangsan.id = 1001;zhangsan.name = "张三";zhangsan.sex = true;zhangsan.address = "北京";zhangsan.age = 20;*/zhangsan.setId(1001);zhangsan.setName("张三");zhangsan.setSex(true);zhangsan.setAddress("北京");zhangsan.setAge(-20);System.out.println("id=" + zhangsan.id);System.out.println("name=" + zhangsan.name);System.out.println("sex=" + zhangsan.sex);System.out.println("address=" + zhangsan.address);System.out.println("age=" + zhangsan.age);}}class Student {//学号private int id;//姓名private String name;//性别private boolean sex;//地址private String address;//年龄private int age;//设置学号public void setId(int studentId) {id = studentId;}//读取学号public int getId() {return id;}public void setName(String studentName) {name = studentName;}public String getName() {return name;}public void setSex(boolean studentSex) {sex = studentSex;}public boolean getSex() {return sex;}public void setAddress(String studentAddress) {address = studentAddress;}public String getAddress() {return address;}public void setAge(int studentAge) {if (studentAge >=0 && studentAge <=120) {age = studentAge;}}public int getAge() {return age;}}
从以上代码可以看出,student的各类属性都被隐藏了,只提供了set和get方法,这样就无法直接给属性赋值了,并且age属性加上了相关的验证,将不符合的数据会过滤掉,不会直接赋给age属性。这就是java的封装性!封装其实就是封装属性,让外界知道的越少越好。

总结为:封装属性,暴露方法。


2.继承

再看一段代码:

class A{public void eat(){System.out.println("吃饭");}public void drink(){System.out.println("喝水");}}class B{public void eat(){System.out.println("吃饭");}public void drink(){System.out.println("喝水");}public void dance(){System.out.println("跳舞");}}

上面有一个A类,里面有吃饭、喝水两个方法。还有一个B类,里面也需要吃饭、喝水两个方法,但是不同的是还有个唱歌方法。但是这样的代码就会发现有很多的重复部分,那有没有更加简洁的写法呢?下面就是java的第二个特性,继承,看下面代码:

class A{public void eat(){System.out.println("吃饭");}public void drink(){System.out.println("喝水");}}class B extends A{public void dance(){System.out.println("跳舞");}}

看到上面代码后可以发现,我们把吃饭和喝水两个方法在B中直接省略了,取而代之的是在类后面加上了extends关键字和A的类名。下面来测试一下:

public static void main(String args[]){B b=new B();b.eat();b.drink();b.dance();}

看一下结果:

吃饭

喝水

跳舞

这时初学者会奇怪,在B中没有吃饭和喝水两个方法啊,为什么能调用呢?这就是java的继承特性!在这儿简单说一下就是子类继承了父类,就可以调用父类中的方法。后面我将再写一篇文章谈一下继承。继承就是增加了类的可重用性,java中的类只支持单继承,但是可以多实现,接口之间可以多继承,这也将在后面进行探讨。

3.多态

多态其实就是多种状态的含义,如我们方法重载,相同的方法名称可以完成不同的功能,这就是多态的一种表现,此时称为静态多态。如:

class Person{public void eat(){System.out.println("吃饭");}public void eat(String food){System.out.println("吃"+food);}}

测试类:

public static void main(String args[]){Person p=new Person();p.eat();p.eat("汉堡");}

看下结果:
吃饭
吃汉堡


这儿就看出来了,调用了相同的方法,区别在于参数不同,所以方法的重载也是多态的一种体现。

再看一个:

class Person{public void eat(){System.out.println("吃饭");}}class Child extends Person{@Overridepublic void eat(){System.out.println("吃水果");}}class Man extends Person{@Overridepublic void eat(){System.out.println("吃大饼");}}
测试一下:

public static void main(String args[]){Person p=new Person();p.eat();Person p1=new Child();p1.eat();Person p2=new Man();p2.eat();}

可以看到,都是Person类,调用的都是eat()方法,但是给出的结果也是不一样的。在这儿,eat()方法具体的执行,是由实现类去决定的。简单的说就是,父类引用指向子类对象。

多态的条件是:有继承或实现,有方法覆盖或实现,父类对象(接口)指向子类对象。


今天就写这么多吧,第一天写博客,写的很浅,写的也不是很好,不过我会努力的,以后尽量每天一篇,把我会的,正在学习的,工作用到的,争取都写上来!奋斗

原创粉丝点击