Java 继承
2016-06-02 18:00
281 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SR_SSS/article/details/51569064
由上可以看到Cat类继承了Animal类,所以可以访问Animal类的name属性和show() 方法。访问控制级别
2. 使用super关键字调用父类的构造函数
什么是值传递? 拿当初学C++的例子来说
猜猜上面的运行结果? 没错,x=5 y=10, 并没有达到交换的目的 基本数据类型按值传递,相当于复制一份过去 ; 引用类型按地址传递,根据地址使用用一份数据,如果数据被改,原有的数据被修改
1.不能通过父类变量去调用子类中父类没有的方法。
我们可以将Animal类型强制转换为Cat型, Cat cat = (Cat) animal ;
2. 在强制转换里,必须知道animal所指向的实体,如果来个 Anmial animal = new Fish() 这时强转就会出错 针对这种情况,Java提供了一个关键字 instanceof, 它可以判断一个对象是否为某个类(或接口)的实例或者子类实例
end.
ps, 1. 如果有误,请指出错在哪,别一句“傻逼”,“有错”之类的直接就走了……
0x00 继承
在Java中子类自动继承父类所有可继承的属性和方法。一个类如何继承自另一个类?用extends关键字声明即可。
举个例子:
class Animal { String name; void show() { System.out.println("Animal"); } }
class Cat extends Animal //Cat类继承自Animal类 { <span style="white-space:pre"> </span>public void showName() { System.out.println("Cat: "+name); } }
// 测试类 public class Test { public static void main(String[] args) { Cat cat=new Cat(); cat.name="Cathy"; cat.show(); cat.showName(); } }
//输出结果 Animal Cat: Cathy
由上可以看到Cat类继承了Animal类,所以可以访问Animal类的name属性和show() 方法。
0x01 访问修饰符
访问范围 | private | default | protected | public |
本类 | √ | √ | √ | √ |
同一包中 | √ | √ | √ | |
子类中 | √ | √ | ||
全局范围 | √ |
0x02 相关关键字this,super,final
this
常用的应该是这个吧,明确的去访问一个类的成员变量,解决与局部变量名称冲突的问题。class Student
{
<span style="white-space:pre"> </span>Stirng name;
<span style="white-space:pre"> </span>public Student(String name)
{
<span style="white-space:pre"> </span>this.name = name;
}
}Over,这里只说最常用的这个。
super
1. 使用super关键字调用父类的成员变量和成员方法super.成员变量
super.成员方法([参数1,参数2……])如, super.show();
2. 使用super关键字调用父类的构造函数
super([参数1, 参数2…])注:通过super调用父类的构造方法的代码必须位于子类构造方法的第一行,并且只能出现一次。
final
1. final 修饰的类不能被继承。 2. final 修饰的方法不能被子类重写 。 3. final 修饰的变量(成员变量和局部变量)是常量,只能赋值一次。 怎么用final修饰? 把final加上呗 比如 final class A{……} // 类 final String name; // 属性 public final void show(){……}// 方法0x03 值传递和引用传递
复杂数据类型属于引用数据类型,如数组 基础数据类型属于值传递(boolean/char/byte/short/float/double/int/long)什么是值传递? 拿当初学C++的例子来说
ublic class Test { static void swap(int x,int y) { int t=x; x=y; y=t; } public static void main(String[] args) { int x=5,y=10; swap(x,y); System.out.println("x="+x+" y="+y); } }
猜猜上面的运行结果? 没错,x=5 y=10, 并没有达到交换的目的 基本数据类型按值传递,相当于复制一份过去 ; 引用类型按地址传递,根据地址使用用一份数据,如果数据被改,原有的数据被修改
0x04 对象的类型转换
可以将子类对象当做父类对象使用Animal animal=new Cat(); // 将Cat对象当做Animal类型使用
1.不能通过父类变量去调用子类中父类没有的方法。
我们可以将Animal类型强制转换为Cat型, Cat cat = (Cat) animal ;
2. 在强制转换里,必须知道animal所指向的实体,如果来个 Anmial animal = new Fish() 这时强转就会出错 针对这种情况,Java提供了一个关键字 instanceof, 它可以判断一个对象是否为某个类(或接口)的实例或者子类实例
if(anmial instanceof Cat)
{
Cat cat = (Cat) animal;
}
end.
ps, 1. 如果有误,请指出错在哪,别一句“傻逼”,“有错”之类的直接就走了……
相关文章推荐
- java面向对象-super、继承、覆盖、多态、类加载、访问控制
- JAVA编程指南 --继承
- JAVA实验三 抽象类的继承和接口的实现 (多态)
- 2018/01/07JAVA 基础 / 接口与继承:用引用调用类方法的陷阱警惕
- Java学习笔记——类与对象(封装、继承与多态)
- 【Java】Java基础知识1. 继承、多态、重载和重写
- Java三大特性之继承+多态
- Java:类与继承
- JAVA——继承以及super和this指针
- java(四)内部类与多重继承
- 超神java——继承的优点和缺点剖析
- Java语言深入-构造函数的继承问题 (转)
- Java继承和静态-加载顺序
- Java_内存管理和继承
- JAVA实现多重继承
- 黑马程序员——Java基础——数组工具类、设计模式和继承(一)
- 黑马程序员——Java基础——继承之内部类(四)
- JAVA中的继承
- Java多线程之Thread继承的用法
- Java三大特征之继承(二)