前言:
刚接触Java的时候,那个时候面对Java面向对象的几个大特征并不理解,所以利用空闲时间在这里一边整理,一边加深形象。
一.包装:
面向Java对象的特征封装。 封装是指类隐藏自己内部的实现细节,向外部提供set/get方法。 封装分为属性封装和方法封装。 将属性定义为私有,它们通过setter和getter方法设置和检索属性值。 在实际的代码开发中,分装的地方非常广泛。 举个最简单的例子,就是我们的pojo
公共类用户{ privateintegeruserid; 私有用户名称; 私有地址; 公共integer get userid () {returnuserID;
} publicvoidsetuserid (integer userid ) {this.userID=userID;
}公共字符串获取名称(() {returnuserName;
} publicvoidsetusername (string username ) {this.userName=userName;
}公共字符串获取地址(() {returnaddress;
} publicvoidsetaddress (string address ) {this.address=address;
}
}
视图代码
上面的类定义了三个成员变量,它们的访问限定都是私有的,使用setter和getter方法为这些变量设置值并取值。 那么,有什么好处呢? 封装的含义是加强类的信息隐藏和模块化,提高安全性。 封装的主要作用是向外界隐藏具体实现细节,提高程序的安全性。
二.继承:
在Java中,如果现有类不能满足所需的字段或方法,并且您不想或无法修改现有类,则必须重新创建新类。 新创建的类称为“子类”。 子类可以具有父类的成员变量和成员方法(非专用)继承,从而提高代码的可复用性。 子类包含父类中的所有内容,可以访问和使用父类中的非专用成员变量,以及重写父类中的非专用成员方法。
定义父类的佩森包括以下方法和字段:
public class person { privateintegerage; 公共集成获取页面() {returnage;
}公共void setage (integer age ) {this.age=age;
}公共void test () ) {
System.out.println (父类的test方法);
}公共void mowen () ) {
System.out.println;
}
}
视图代码
定义子类User并继承人员类:
publicclassuserextendsperson { privateintegeruserid; 私有用户名称; 私有地址; 公共语音测试(
System.out.println (子类的test方法);
}publicInteger getUserID () {returnuserID;
} publicvoidsetuserid (integer userid ) {this.userID=userID;
}公共字符串获取名称(() {returnuserName;
} publicvoidsetusername (string username ) {this.userName=userName;
}公共字符串获取地址(() {returnaddress;
} publicvoidsetaddress (string address ) {this.address=address;
}
}
视图代码
运行测试:
public class test { publicstaticvoidmain (string [ ] args ) }
用户用户=new user (;
user.s
etAge(12);user.test();
user.mowen();
System.out.println(user.getAge());
}
}
View Code
测试结果:
子类test方法
父类莫问方法12Process finished with exit code0
View Code
我们很清楚的看到子类中可以调用父类中的莫问()方法,且在子类中重写了父类的test()方法,执行结果以子类为准,且子类继承了父类的字段age。
三、抽象:
当一个类中有一个abstract修饰符(但要注意只要有抽象方法的类就是抽象类)、父类中存在抽象方法(也可以没有)抽象方法没有方法体并且修饰符一定要是public或者protected,且抽象类不能不能实例化
所有子类都必须实现这些抽象方法(如果没实现就必须把它也定义成一个抽象方法) 虽然不能new出来但是它可以有自己的static方法。
抽象类中可以定义抽象方法和不同方法,也可以定义变量,但如果抽象类存在抽象方法(注:抽象方法不能用private私有化),继承他的子类必须要实现该方法,否则编译就无法通过
四、多态:
在面向对象的四个基本特征中多态是非常重要的,同时相比较其他的特征稍微复杂一点,下面就重点说一下Java中的多态
多态存在的必要条件:
1、有继承关系
2、子类重写父类方法
3、父类引用指向子类对象
多态存在必须要有“子类重写父类方法”这一条件,name就要注意下面三种情况是没有办法表现出多态特性的(因为不能被重写):
1、static方法,因为被static修饰的方法是属于类的,而不是属于实例的
2、final方法,因为被final修饰的方法无法被子类重写
3、private方法和protected方法,前者是因为被private修饰的方法对子类不可见,后者是因为尽管被protected修饰的方法可以被子类见到,也可以被子类重写,但是它是无法被外部所引用的,一个不能被外部引用的方法,怎么能谈多态呢
先来编写两个类Father、Children,同时Children继承Father类
public classFather {privateInteger age;publicInteger getAge() {returnage;
}public voidsetAge(Integer age) {this.age =age;
}
}
View Code
public class Children extendsFather{privateString userName;publicString getUserName() {returnuserName;
}public voidsetUserName(String userName) {this.userName =userName;
}
}
View Code
向上转型:(子类进行类的提升转换为父类)
public classTest {public static voidmain(String[] args){
Father father= newChildren();
father.setAge(22);
((Children) father).setUserName("逝清雪");
System.out.println(father.getAge()+ "n" +((Children) father).getUserName());
}
}
View Code
测试结果:
22逝清雪
Process finished with exit code0
View Code
通过测试我们可以发现,当子类进行类的提升后,原本父类(Father)中并没有UserName字段,而UserName这个字段原本是出现在子类中的,但现在父类却可以对子类的中的字段进行操作,由此可以看出:多态中的向上转型后,父类拥有了子类的特性,换句话说,向上转型后还是子类自己本身。
向下转型:(在java中Children c = new Father()是无法编译通过的,在这里必须强行转换)
public classTest {public static voidmain(String[] args){
Father father= newChildren();
Children children=(Children) father;
children.setAge(22);
children.setUserName("逝清雪");
System.out.println(father.getAge()+ "n" +((Children) father).getUserName());
}
}
View Code
测试结果:
22逝清雪
Process finished with exit code0
View Code
向下转型,我们必须要进行强转,同时可以看到子类可以操作父类中的字段,由此可以看出:向下转型子类拥有了父类的特性,
由此我们可以看出:在Java中的多态不管是向上转型、还是向下转向,最后都还是子类本身。