Java从入门到精通11
文章目录
一、方法的重载
Java允许在同一个类中定义多个同名方法,只要形参列表不同就行。
如果在同一个类中包含两个或两个以上方法名相同的方法,但形参列表不同,则称为方法重载
行参列表不同包括行参个数不同,行参顺序不同等
方法重载实例:
package 方法的重载;
public class Demo {
public static void a(){
}
public static void a(int a){
}
public static void a(int a,int b){
}
public static void a(double a){
}
}
二、继承
1、什么是继承?
让类与类之间产生关系
在 Java 中通过 extends 关键字可以申明一个类是从另外一个类继承而来的
2、格式
class 父类 {
}
class 子类 extends 父类 {
}
3、继承的规则
1.成员变量的继承
成员变量是可以被继承的,私有的成员变量无法被继承
如果成员变量同名,优先使用自己的
成员变量可被继承实例:
package 继承;
public class Demo1 {
public static void main(String[] args) {
B b = new B();
b.a=10;
System.out.println(b.a);
}
}
class A{
int a;
}
class B extends A{
}
私有的成员变量不可以被继承实例:
成员变量同名,优先使用自己的示例:
package 继承;
public class Demo2 {
public static void main(String[] args) {
D d = new D();
System.out.println(d.a);
}
}
class C{
int a=10;
}
class D extends C{
int a=20;
}
2.方法的继承
成员方法可以被继承,构造方法不能被继承
子类是不继承父类的构造器(构造方法或者构造函数)的,它只是调用(隐式或显式)。如果父类的构造器带有参数,则必须在子类的构造器中显式地通过 super 关键字调用父类的构造器并配以适当的参数列表。
如果父类构造器没有参数,则在子类的构造器中不需要使用 super 关键字调用父类构造器,系统会自动调用父类的无参构造器
package 继承;
public class Demo3 {
public static void main(String[] args) {
new B1();
}
}
class A1{
public A1() {
System.out.println("A1构造器!");
}
}
class B1 extends A1{
public B1() {
System.out.println("B1构造器!");
}
}
3.继承的优缺点
- 子类拥有父类非 private 的属性、方法
- 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展
- 提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密,代码独立性越差)
4.继承的特点
- Java只支持单继承,不支持多继承
- Java支持多层继承
- 如果想用这个体系的所有功能用最底层的类创建对象
- 如果想看这个体系的共性功能,看最顶层的类
多层继承实例:
package 方法多层继承;
public class Demo {
public static void main(String[] args) {
C c =new C();
c.a();
c.b();
}
}
class A{
public void a (){
System.out.println("这是A类a方法");
}
}
class B extends A{
public void b (){
System.out.println("这是B类b方法");
}
}
class C extends B{
}
这里可以看到C类里没有如何方法,但是多层继承了A类和继承了B类,就拥有了A类和B类的方法了。
三、this和super
super关键字:我们可以通过super关键字来实现对父类成员的访问,用来限定该对象调用它从父类继承得到的实例变量或方法。
super只能出现在子类的方法或构造器中,出现在子类方法外时报错!
package super的规则;
public class Demo {
public static void main(String[] args) {
new B().b();
}
}
class A {
int age;
public void a(){
System.out.println("A的静态方法");
}
}
class B extends A{
public void b(){
super. a();
}
}
继承示例:
this关键字:指向自己的引用。
四、方法的重写
1、前提
- 方法名相同,行参列表相同
- 子类方法的返回值类型应比父类方法的返回值类型小或者相等。(一般重写的方法返回值类型与原方法相同)
double > float > long > int > char > short > byte
父类的方法返回值为byte类型,若子类方法重写的返回值只能说byte类型 - 子类方法的访问权限应比父类方法的访问权限大或者相等且父类不能是private(一般重写的方法与原方法权限相同)
权限作用域比较:
public>protected>friendly>private - 覆盖方法只能是实例方法,不能是静态方法
2、格式
格式:
class 父类
{
权限修饰符 返回值类型 方法名 (){
方法体1
}
}
class 子类 extends 父类{
权限修饰符 返回值类型 方法名 (){
方法体2
}
}
方法体重写,其他参照前提
方法重写示例:
package 方法的重写;
public class Demo {
public static void main(String[] args) {
new B().a();
}
}
class A{
public void a(){
System.out.println("我是A中的方法!");
}
}
class B extends A{
public void a(){
System.out.println("我是B中重写的方法a");
}
}
方法的重写一般用于子类的需求父类的方法不能够满足或者情况有变的情况下使用。