亲宝软件园·资讯

展开

Java基础语法(10)-面向对象之三大特征

BenCoper 人气:1
> title: **Java基础语法(9)-面向对象之类的成员** > > blog: [CSDN](https://blog.csdn.net/BenCoper) > > data: [Java学习路线及视频](https://www.cnblogs.com/bencoper/p/12558477.html) ### 1.面向对象特征--封装 1. **为什么需要封装?封装的作用和含义?** 我要用洗衣机,只需要按一下开关和洗涤模式就可以了。有必要了解洗衣机内部的结构吗?有必要碰电动机吗? 我要开车,… 隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提高系统的可扩展性、可维护性。通俗的说,把该隐藏的隐藏起来,该暴露的暴露出来。这就是封装性的设计思想。 2. **信息的封装和隐藏** Java中通过将数据声明为私有的(private),再提供公共的(public)方法: getXxx()和setXxx()实现对该属性的操作 ```java class Animal { private int legs; // 将属性legs定义为private,只能被Animal类内部访问 public void setLegs(int i) { if (i != 0 && i != 2 && i != 4) { System.out.println("Wrong number of legs!"); return; } legs = i; } public int getLegs() { return legs; } } ``` ```java public class Zoo { public static void main(String args[]) { Animal xb = new Animal(); xb.setLegs(4); // System.out.println(xb.getLegs()); } } ``` 3. 四种访问权限修饰符 Java权限修饰符public、protected、(缺省)、private置于类的成员定义前,用来限定对象对该类成员的访问权限。 | **修饰符** | **类内部** | **同一个包** | **不同包的子类** | **同一个工程** | | ---------- | :--------: | :----------: | :--------------: | :------------: | | private | Yes | | | | | (缺省) | Yes | Yes | | | | protected | Yes | Yes | Yes | | | public | Yes | Yes | Yes | Yes | 对于class的权限修饰只可以用public和default(缺省)。 public类可以在任意地方被访问 default类只可以被同一个包内部的类访问 ### 2.面向对象特征--继承 1. **为什么要有继承?** 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。 此处的多个类称为子类(派生类),单独的这个类称为父类(基类或超类)。可以理解为:“子类 is a 父类” 2. **类继承语法规则:** class Subclass extends SuperClass{ } 3. **作用:** - 继承的出现减少了代码的冗余,提高代码的复用性 - 继承的出现,更有利于功能的扩展 - 继承的出现让类与类之间产生了关系,提供了多态的前提。 4. **规则:** - Java只支持单继承和多层继承,不允许多重继承 - 一个子类只能有一个父类 - 一个父类可以派生出多个子类 5. **单继承与多层继承举例** ### 3.面向对象特征-多态性 1. **多态的作用** - 父类的引用指向子类的对象 2. **规则** - 编译时,看左边;运行时,看右边。 3. **向上转型** - 在Java中,子类的对象可以替代父类的对象使用 ```java Person p = new Student(); Object o = new Person(); //Object类型的变量o,指向Person类型的对象 o = new Student(); //Object类型的变量o,指向Student类型的对象 ``` - 子类可看做是特殊的父类,所以父类类型的引用可以指向子类的对象:向上转型(upcasting)。 4. **动态绑定** - 编译时e为Person类型,而方法的调用是在运行时确定的,所以调用的是Student类的getInfo()方法 ```java public class Test { public void method(Person e) { e.getInfo(); } public static void main(Stirng args[]) { Person e = new Person(); e.getInfo(); } ``` 5. **instanceof关键字** - 作用:用来判断某个对象是否属于某种数据类型。 - 注意: 返回类型为布尔类型 ```java Fu f1=new Zi(); Fu f2=new Son(); if(f1 instanceof Zi){ System.out.println("f1是Zi的类型"); } else{ System.out.println("f1是Son的类型"); } ``` 6. 向下转型 - 一个已经向上转型的子类对象可以使用强制类型转换的格式,将父类引用类型转为子类引用各类型 - 子类类型 变量名=(子类类型) 父类类型的变量; ```java public class Main { public static void main(String[] args) { Person person = new Superman(); Superman s = (Superman)person; //向下转型 s.sleep(); s.fly(); s.eat(); } } ``` ### 4.结语 2020-3-31: [Java基础语法(8)-数组中的常见排序算法](https://www.cnblogs.com/bencoper/p/12616335.html) 2020-3-31: [Java基础语法(9)-面向对象之类的成员](https://www.cnblogs.com/bencoper/p/12616347.html) - 今日好文推荐 - [一文带你入门Java Stream流,太强了](https://blog.csdn.net/qing_gee/articlehttps://img.qb5200.com/download-x/details/105238960) - [学历低,无法胜任工作,大佬告诉你应该怎么做](https://blog.csdn.net/qing_gee/articlehttps://img.qb5200.com/download-x/details/104628849) - 今日资料推荐 - [我的Java自学之路](https://how2j.cn?p=60346)

加载全部内容

相关教程
猜你喜欢
用户评论