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

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

先介绍一下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{
	@Override
	public void eat(){
		System.out.println("吃水果");
	}
}
class Man extends Person{
	@Override
	public 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()方法具体的执行,是由实现类去决定的。简单的说就是,父类引用指向子类对象。

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


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值