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()方法具体的执行,是由实现类去决定的。简单的说就是,父类引用指向子类对象。
多态的条件是:有继承或实现,有方法覆盖或实现,父类对象(接口)指向子类对象。
今天就写这么多吧,第一天写博客,写的很浅,写的也不是很好,不过我会努力的,以后尽量每天一篇,把我会的,正在学习的,工作用到的,争取都写上来!
- java SE 面向对象(1):面向对象三大特性
- 【java】面向对象(三大特性)
- JAVA面向对象的三大特性
- java面向对象三大特性
- Java面向对象的三大特性
- Java面向对象三大特性
- java面向对象的三大特性
- Java面向对象的三大特性
- java面向对象的三大特性
- Java面向对象的三大特性
- Java面向对象三大特性
- Java 面向对象三大特性总结
- java面向对象三大特性-封装
- java面向对象三大特性-继承
- java面向对象三大特性-多态
- Java面向对象三大特性归纳
- java面向对象三大特性--封装
- java面向对象三大特性--继承
- Latex中如何高效的查找到参考文献
- 全球限量650部 兰博基尼再推奢华新品手机
- Java堆与内存优化
- 将一个图片切割成多个图片
- PP相关资源
- java SE 面向对象(1):面向对象三大特性
- Windows环境下msysgit下安装gitflow步骤。
- struts国际化
- 获取分辨率
- FunctionDemo1
- 毕业设计
- CALayer
- FunctionDemo2
- Android 图片操作(Bitmap)