黑马程序员_继承
来源:互联网 发布:淘宝联盟如何身份认证 编辑:程序博客网 时间:2024/04/30 18:31
———– android培训、 java培训
、java学习型技术博客、期待与您交流! ——-
继承
继承的好处。 1,提高了代码的复用性。 2,让类与类产生了关系,给第三个特征提供了前提。
class Person{ String name; int age;}class Student extends Person{ //Student 这个类中是本来是没有姓名和年龄。但是他从Person这个类中继承了过来。所以,他具有了姓名和年龄。 System.out.println("student .... 学习");}class Worker extends Person{ System.out.println("worker .... 工作");}class Demo{ public static void main(String[] args){ Student s=new Student(); s.name="zs"; s.age=22; s.study(); }}
单继承和多继承
java中支持单继承,不直接支持多继承,但对C++中的多继承机制进行改良。 单继承:一个子类只能有一个直接父类。 多继承:一个子类可以有多个直接父类(java中不允许,进行改良)不直接支持,因为多个父类中有相同的成员,因为会产生调用的不确定性。 在java中通过“多实现”的方式来体现。java支持多层(多重)继承。C继承B,B继承A。就会出现继承体系当要使用一个继承体系时, 1,查看该体系中的顶层类,了解该体系的基本功能。 2,创建体系中的最子类对象,完成功能的使用。
什么时候定义继承?
当类与类之间存在着所属关系的时候,就定义继承。xxx是yyy中的一种。xxx extends yyy 所属关系: is a关系。 谁是谁谁的一种简单举一个例子:学生是人的一种。这个句话就符合了is a的关系,就可以使用继承体系。
继承中:子父类成员的特点体现
1,成员变量。 2,成员函数。 3,构造函数。
1.成员变量
当本类的成员和局部变量同名用this区分。 当子父类中的成员变量同名用super区分父类。 this 和super的用法很相似 this:代表一个本类对象的引用。 super:代表一个父类的空间。
class Fu{ int num=4;}class Zi extends Fu{ int num=5; //子类中有就不找父类 void show(){ System.out.println(this.num+"......"+super.num); } //子类不能直接访问父类中私有的方法。但是可以通过间接访问}public class Ten1 { public static void main(String[] args) { Zi z=new Zi(); z.show(); /* * 在内存当中的运行过程 * * 首先,main函数先进栈,产生z,然后在方法区中,会分别开辟 * 2个空间。Fu类和zi类 的空间,他们的方法会全部进去(构造函数,一般方法)。 * 同时在zi类中会有super指向Fu类的空间 * * 然后,就会在堆中产生一个对象的地址,同时,在这个对象的所属空间中, * 开辟2个小空间,分别代表子类和父类的空间。 * * 然后,show方法进栈this.num就会指向堆中zi类小空间,super就会指向父类的小空间 * * * * */ }}
2:子父类中成员函数的特点-覆盖
当子父类中出现成员函数一模一样的情况,会 运行子类的函数。 这种现象,称为覆盖操作,这是函数在子父类中的特性。 函数两个特性: 1,重载。同一个类中。 2,覆盖。子类中。覆盖也成为重写,覆写。override 覆盖注意事项: 1,子类方法覆盖父类方法时,子类权限必须要大于等于父类的权限。 2,静态只能覆盖静态,或被静态覆盖
class Fu{ void show(){ System.out.println("sss"); } /*void show1(){ System.out.println("fu show run"); }*/}class Zi extends Fu{ void show(){ System.out.println("ss111s"); } /* void show2(){ System.out.println("zi show run"); }*/}public class Twelve1 { public static void main(String[] args) { Zi z=new Zi(); z.show(); //z.show1(); //z.show2(); /*在内存中的运行过程 * * 在方法区里面,开辟一个小空间,Fu类的构造函数,show1()方法都会进去, * 同时子类也会开辟一个小空间,子类的构造方法和show2()都会进去方法区。 * * main函数会进栈,产生一个z,在堆里面会出现一个地址,然后地址就会赋给z。 * * z.show1(),首先会去方法区的中的子类的小空间找。看找不找的到show1。找不到就通过super关键字找父类的空间中有没有show1()。找到了。show1()就会进栈,然后运行 * * */ }}
覆盖的应用
什么时候使用覆盖操作? 当对一个类进行子类的扩展时,子类 需要保留父类的功能声明, 但是要定义子类中该功能的特有内容时,就使用覆盖操作完成。
class Phone{ void call(){} void show(){//手机的来电显示,只能显示电话号码。 System.out.println("number"); }}class newPhone extends Phone{ void show(){//后来新一代的手机,可能显示,姓名,大头贴。同时还可以显示电话号码。 //在这种情况之下就因该使用覆盖。 System.out.println("name"); System.out.println("pic"); super.show(); }}
0 0
- 黑马程序员_继承
- 黑马程序员_继承
- 黑马程序员_继承
- 黑马程序员_继承
- 黑马程序员_继承
- 黑马程序员_继承
- 黑马程序员_继承
- 黑马程序员_继承
- 黑马程序员_继承
- 黑马程序员_继承
- 黑马程序员_继承
- 黑马程序员_继承
- 黑马程序员_继承性
- 黑马程序员_继承、子父类
- 黑马程序员_.NET继承
- 黑马程序员_继承2
- 黑马程序员_面向对象_继承
- 黑马程序员_ JAVA中的继承2
- javascript的内部类和事件驱动
- javascript的DOM编程
- Tutorial: Install Logstash and Kibana on a Windows server
- MySQL基本命令及注意事项
- [游戏运营期间开发]纪律性
- 黑马程序员_继承
- Trace Failed Requests <traceFailedRequests>
- How to Enable Failed Request Tracing for UNC Hosting
- debian-纯文本行下和图形下-分辨率设置
- IIS: Cannot Write Configuration File due to Insufficient Permissions
- codeforces 604B More Cowbell
- 黑马程序员_继承中子父类的实例化过程
- debian8-my-cmd-history.log
- MATLAB链接MinGW编译器