继承
面向对象三大特征之一。可使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法
关于继承中变量访问特点
在方法中使用变量,首先去方法内部找,没有则去本类成员内部去找,若也没有,则会去父类成员位置去找
(观察三段代码不同)
package smile;
public class main1 {
public static void main(String []args) {
Zi z=new Zi();
z.show();
}
}
class Fu{
public int age=40;
}
class Zi extends Fu{
public int height=175;
public void show(){
System.out.println(age);
System.out.println(height);
}
}
/*输出
40
175
*/
package smile;
public class main1 {
public static void main(String []args) {
Zi z=new Zi();
z.show();
}
}
class Fu{
public int age=40;
}
class Zi extends Fu{
public int height=175;
public int age=20;//子类中有则不会去使用父类的
public void show(){
System.out.println(age);
System.out.println(height);
}
}
/*输出
20
175
*/
package smile;
public class main1 {
public static void main(String []args) {
Zi z=new Zi();
z.show();
}
}
class Fu{
public int age=40;
}
class Zi extends Fu{
public int height=175;
public int age=20;
public void show(){
int age=30;//方法内部有则优先
System.out.println(age);
System.out.println(height);
}
}
/*输出
30
175
*/
super
package smile;
public class main1 {
public static void main(String []args) {
Zi z=new Zi();
z.show();
}
}
class Fu{
public int age=40;
}
class Zi extends Fu{
public int age=20;
public void show(){
int age=30;
System.out.println(age);//访问方法中的成员变量30
System.out.println(this.age);//访问本类中成员变量20
System.out.println(super.age);//访问父类中成员变量40
}
}
/*输出
30
20
40
*/
继承中构造方法的访问特点
package smile;
public class main1 {
public static void main(String []args) {
Zi z=new Zi();
Zi z1=new Zi(10);
}
}
class Fu{
public Fu(){
System.out.println("Fu类中无参构造方法被调用");
}
public Fu(int age){
System.out.println("Fu类中带参构造方法被调用");
}
}
class Zi extends Fu{
public Zi(){
System.out.println("Zi类中无参构造方法被调用");
}
public Zi(int age){
System.out.println("Zi类中带参构造方法被调用");
}
}
/*输出
Fu类中无参构造方法被调用
Zi类中无参构造方法被调用
Fu类中无参构造方法被调用
Zi类中带参构造方法被调用
*/
继承中成员方法的访问特点
package smile;
public class main1 {
public static void main(String []args) {
Zi z=new Zi();
z.method();
z.show();
}
}
class Fu{
public void show(){
System.out.println("Fu类中show()方法被调用");
}
}
class Zi extends Fu{
public void method(){
System.out.println("Zi类中method()方法被调用");
}
public void show(){
super.show();//访问父类的成员方法
System.out.println("Zi类中show()方法被调用");
}
}
/*输出
Zi类中method()方法被调用
Fu类中show()方法被调用
Zi类中show()方法被调用
*/
举例
package smile;
public class main1 {
public static void main(String []args) {
Zi z=new Zi();
z.show();
z.method();
}
}
class Fu{
public int age=40;
public Fu(){
System.out.println("Fu类无参构造方法被调用");
}
public void method(){
System.out.println("Fu类method方法被调用");
}
}
class Zi extends Fu{
public int age=20;
public Zi(){
super();
System.out.println("Zi类无参构造方法");
}
public void show(){
int age=30;
System.out.println(age);
System.out.println(this.age);//通过this访问的成员变量
System.out.println(super.age);//通过super访问的成员变量
}
}
/*输出
Fu类无参构造方法被调用
Zi类无参构造方法
30
20
40
Fu类method方法被调用
*/
方法重写
package smile;
public class main1 {
public static void main(String []args) {
Phone p=new Phone();
p.call("lili");
System.out.println("-----");
newPhone np=new newPhone();
np.call("lili");
}
}
class Phone{
public void call(String name){
System.out.println("给"+name+"打电话");
}
}
class newPhone extends Phone{
public void call(String name){//方法重写,与父类声明方法一样
System.out.println("开启视频功能");
System.out.println("给"+name+"打电话");
//super.call(name);//利用父类的call方法输出给lili打电话
}
}
/*输出
给lili打电话
-----
开启视频功能
给lili打电话
*/
方法重写的注意事项
私有方法不能被重写(父类私有成员变量不能被继承)
子类方法访问权限不能更低(public>默认>私有)
class Fu{
private void show(){
System.out.println("Fu中show()方法被调用");
}//zi类不可以访问
void method(){
System.out.println("Fu中method()方法被调用");
}//zi类访问可以加public也可以不加
}
Java继承注意事项
Java中类只支持单继承,不支持多继承
Java中类支持多层继承
错误示例
class Mother{
private void dance() {
System.out.println("mother爱跳舞");
}
}
public class Son extends Father,Mother{
}
支持多层继承
class Granddad{
public void drink(){
System.out.println("爷爷爱喝酒");
}
}
class Father extends Granddad{
public void smoke(){
System.out.println("爸爸爱抽烟");
}
}
class Son1 extends Father{
}