Java 继承 与 抽象类
Java 继承 与 抽象类
- 继承
- 抽象类
继承
1、一个类 从另一个类中派生而来,就是继承。
2、继承也是面向对象语言的三大特征之一。 面向对象的语言都具有三大特征,分别是 封装,继承,多态。
3、什么时候需要继承?
创建类时,如果已有的某个类中的成员变量或成员方法与当前类相同,此时就可以考虑采用继承的方式。
4.继承时 要使用 extends关键字
public class son extends father{public static void main(String[] args) {}
}class father{}
5.被继承的类 我们一般称为 超类(或父类)。; 继承超类的类 称为 子类。在Java中允许多重继承,C继承 B B 继承 A ;
6.超类中 非私有的成员变量和成员方法可以被子类继承,亦这些成员变量和方法成为了子类的成员变量和方法。如果是私有的成员变量和方法不能被继承。在子类中也不可以被使用。
public class son extends father{public static void main(String[] args) {new son();}public son(){super.kiri="牛基";System.out.println(super.kiri);}
}class father{private String name;public String kiri="李四";private void nameti(){System.out.println("张三");}
}
7.有可能 子类 中定义的成员变量 与超类中的 成员变量同名,此时我们通过子类来使用该成员变量时,使用的是子类中的成员变量。
public class son extends father{public static void main(String[] args) {new son();}public son(){super.kiri="牛基";nameti();}@Overridepublic void nameti(){//重写的权限修饰符的范围要大于或等于,重写前(也就是父类中)的权限修饰符的范围。//假如 父类是 private,则没有重写的概念,因为private方法,并没有被继承。System.out.println("张三的儿子");}
}class father{private String name;public String kiri="李四";public void nameti(){System.out.println("张三");}
}
8.在成员变量 同名情况下,如果子类要使用父类的同名的成员变量。需要在成员变量前 加super关键。此时super表示的就是父类的对象。
public class son extends father{private String kiri="李四的儿子";public static void main(String[] args) {new son();}public son(){System.out.println(super.kiri);}@Overridepublic void nameti(){System.out.println("张三的儿子");}
}class father{private String name;public String kiri="李四";public void nameti(){System.out.println("张三");}
}
9.如果子类中具有与父类同名的方法(参数完全相同)。此时会发生方法的覆盖。这就是方法的重写。如果设计子类时,如果父类中的某个方法不满足子类的要求,就可以进行方法的重写(子类的方法及参数与父类的某个方法及参数完全一致,返回值和修饰符可以不一致)。在子类中调用父类中被重写的方法也要使用super关键。
public class son extends father{private String kiri="李四的儿子";public static void main(String[] args) {new son();}public son(){super.nameti();}@Overridepublic void nameti(){System.out.println("张三的儿子");}
}class father{private String name;public String kiri="李四";public void nameti(){System.out.println("张三");}
}
10.在Java中,如果 一个类 继承了 另一个类,这两个类就具有了关系,它们具有父类与子类的关系。
11.如果一个子类被实例化,首先要实例化 它的父类的对象,然后用super来引用父类对象并把super交给子类使用。此时super就是一个引用类型的变量,它引用的就是父类的对象,然后再 实例化子类的对象,此时也会给 子类传递一个引用类型的变量this,它引用的就是当前子类的对象。
public class son extends father{private String kiri="李四的儿子";public static void main(String[] args) {new son();}public son(){//父类没有无参构造方法时,必须调用有参构造方法,且这条语句要在子类构造方法的第一条语句,调用super("父亲的有参构造方法"); System.out.println("son");}@Overridepublic void nameti(){System.out.println("张三的儿子");}
}class father{private String name;public String kiri="李四";public void nameti(){System.out.println("张三");}//当写了构造方法(不管你写的构造方法是有参的还是无参的)时,默认提供的无参构造方法,将不会被调用。public father(String name){this.name=name;System.out.println(name);}
}
12.任何类被实例化都必须调用构造方法,通过构造方法来初始化成员,
13、如果超类没有无参的构造方法(它一定有带参的构造方法),子类就必须要有显示的构造方法,且在构造方法的第一行调用超类的构造方法。Super(嘻嘻嘻,xx);之所以这样,是因为任何类被实例化时都必须对成员变量进行初始化,实例化子类的对象之前必须要实例化超类的对象,以保证超类中的成员变量已经被初始化,如果 超类中有带参的构造方法,这就说明超类的初始化要通过带参的构造方法来完成以保证 成员变量能够接受外部的传值。
14、在Java中 不允许一次继承多个类,也就是extends 类名1,类名2…。这种继承方式称为多继承。在C++中允许多继承。在多继承的情况下,可能会发生超类的成员变量和成员方法 同名。造成子类的混乱。如果在实际开发中,真的需要进行 多继承,Java提供了三种解决方案,第一,采用组合的方式(把本就是超类的对象作为子类的一个成员变量);第二种方案就是采用接口,第三种方案 就是采用内部类。
采用组合来实现继承的功能,可以减少对类的侵入,这也是当前被多数人推崇的方式。
抽象类
在 设计类时,有的类中的方法没有办法确定它的具体行为,此时就可以把该方法声明为抽象的方法。抽象方法需要使用abstract关键字进行声明。
public class son extends father{}abstract class father{}
如果一个类中有抽象的方法,那么该类就必须声明为抽象类。
public class son extends father{@Overridepublic void nameti() {}
}abstract class father{//abstract 和 public不能省略(但是在接口中可以省略)(接口中对于表达抽象方法)abstract public void nameti();
}
1.抽象类 不能被实例化为对象。原因在于,在一个具体的对象上,不能够存在抽象的 成员。
public class son extends father{public static void main(String[] args) {father yi=new son(); // 但是可以多态 来使用yi.nameti();}@Override//抽象类中的抽象方法可以自定义抽象方法的权限修饰符,//(三种,默认(不写),protected,public,(private不能与abstract搭配))//而在接口中,抽象方法 必须是public修饰。。(默认就是public)public void nameti() { //重写的权限修饰符的范围要大于或等于,重写前(也就是父类中)的权限修饰符的范围。//假如 父类是 private,则没有重写的概念,因为private方法,并没有被继承。System.out.println("重写的");}
}abstract class father{abstract public void nameti();
}
2.抽象类只能被继承,它只能作为超类使用。此时,子类就必须实现抽象类的抽象方法。
3.在 实现抽象方法时,方法上面应该加上 @Override 注释,这样的编译器就知道该方法是重写或实现超类的方法(抽象方法),如果方法被加上了 @Override ,那么方法的名称和参数只能与超类的方法保持一致,否则编译不能通过。
4.抽象类也可以有自己的构造(也就是也有自己的构造方法),它只能作为超类使用,被子类继承,所有与继承有关的规则,在这种情形都适用。
public class son extends father{public static void main(String[] args) {new son();}public son(){super("抽象父类构造方法");System.out.println("son");}@Overridepublic void nameti() {}
}abstract class father{public father(String name){System.out.println(name);}abstract public void nameti();
}
Java 继承 与 抽象类相关推荐
- Java实验三 Java继承、抽象类与接口(13题)
文章目录: 一:基本问题 二:说明下面说法是否正确 三:编写一个Java应用程序.设计一个汽车类Vehicle,包含的成员属性有:车轮个数wheels和车重weight.小车类Car是Vehicle的 ...
- 腾讯架构师讲解Java接口的继承与抽象类
在实施接口中,我们利用interface语法,将interface从类定义中独立出来,构成一个主体.interface为类提供了接口规范. 在继承中,我们为了提高程序的可复用性,引入的继承机制.当时的 ...
- Java面向对象(继承、抽象类)
面向对象 今日内容介绍 u 继承 u 抽象类 第1章 继承 1.1 继承的概念 在现实生活中,继承一般指的是子女继承父辈的财产.在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成 ...
- 10.java基础----继承、抽象类- 编程
命名要求:1. 类名,接口名,枚举名,注解名使用大驼峰2. 变量名,方法名,包名均使用小驼峰3. 常量名全大写,多个单词下划线分割4. 名字要见名知意,如果不知道对应的英文,可以使用拼音代替.不可使用 ...
- 第二十八节:Java基础-进阶继承,抽象类,接口
前言 Java基础 - 进阶继承,抽象类,接口 进阶继承 class Stu {int age = 1; } class Stuo extends Stu {int agee = 2; } class ...
- 1-10 Java 继承、protected和abstract抽象类
文章目录 1.继承 1)概念 2)代码例子 2.重写 1) 业务背景 2)代码实现 3)代码说明 3.抽象类,抽象方法 1)业务场景 2)abstract,抽象的 4.protected 修饰符 1. ...
- 11.0_[Java 继承]-继承/重写/抽象类/抽象方法/ final 修饰符
################################################## 目录 继承 什么是继承 继承语法 super 关键字 如何使用继承 java.lang.Objec ...
- java 继承、super、this、抽象类
java 继承.super.this.抽象类 三大特性--继承 方法重写 super关键字 this关键字 抽象类 第一章 继承 1.1 概述 由来 多个类中存在相同属性和行为时,将这些内容抽取到单独 ...
- Java中定义抽象类Shape,其中包含抽象方法double getPeremeter( )求周长和double getArea( )求面积。 定义一个矩形类,继承此抽象类,并自行扩充成员变量和方法。
Java中定义抽象类Shape,其中包含抽象方法double getPeremeter( )求周长和double getArea( )求面积. 定义一个矩形类,继承此抽象类,并自行扩充成员变量和方法, ...
最新文章
- Android UI进阶之旅9 Material Design之沉浸式设计
- scrollToItemAtIndexPath使用
- 二叉树中最大/最小深度与叶子数
- linux ubuntu文件浏览器如何显示隐藏文件?(快捷键ctrl+h)
- Map的putAll方法踩坑实记(对象深拷贝浅拷贝)
- 收藏!AI 最全干货超级大列表,100+ 张速查表全了!
- GitHub Actions 支持 skip ci 了
- python twisted教程一,异步编程
- js路由在php上面使用,director.js实现前端路由使用实例
- react初识生命周期
- 数据库设计需要注意什么
- spring源代码分析
- SMILES Enumeration
- 斯坦福自然语言处理(1)——三元组的使用
- docker容器内开启22 ssh_细述docker容器中创建SSH服务镜像
- 树莓派4b常用资料汇总
- JavaScript EventListener
- MySQL Java JDBC
- 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛 K-密码
- Linux kernal API