首页 > 编程知识 正文

简述java的特点,java的面向对象

时间:2023-05-06 02:28:01 阅读:111042 作者:2837

前言:

刚接触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中的多态不管是向上转型、还是向下转向,最后都还是子类本身。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。