您的位置:首页 > 编程语言 > Java开发

杰神之Java代码块和方法的继承(方法重载和方法重写)

2018-01-10 21:37 357 查看

Java代码块和方法的继承(方法重载和方法重写)

代码块

代码块分类:

* 1.局部代码块(限制变量的作用域)

书写位置:方法中

* 2.构造代码块(在开发中很少使用)

书写位置:在类中方法外

调用时机:如果你有构造代码块,系统会帮你调用

帮你在创建对象之前调用 每次创建对象都会调用

* 3.静态代码块(一定是被static修饰的)

静态代码块依赖类 随着类的加载而加载

注意:加载一次(不管你创建多少对象,系统只调用一次)

应用场景:加载驱动(U盘装载驱动程序 JDBC数据库驱动)

* 4.同步代码块(多线程)

public class Demo01 {
public static void main(String[] args) {
/*{
System.out.println("我是局部代码块");
}   */
Person person = new Person();
person.setAge(15);
person.setName("james");
person.sayHi();
Person person1 = new Person("Tom", 12);
person1.sayHi();
}
}
// 人名 年龄 有参无参 构造 sayHi
class Person{
private String name;
private int age;
//构造代码块
{
// 每个对象都会调用同一样的方法 可以使用代码块
System.out.println("哈哈");
}
static{
System.out.println("我是静态代码块");
}
// 有参无参构造方法
public Person() {
System.out.println("我是无参的构造方法");
}

public Person(String name, int age) {
this.name = name;
this.age = age;
System.out.println("我是有参的构造方法");
}
// get/set方法
public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}
//  sayHI方法
public void sayHi() {
System.out.println(name + " " +age);
}

public void sleep() {
System.out.println("睡觉 就是爽");
}
}


继承

特点:

1.减少代码量

2.让类与类之间产生关联(父子)

继承使用的关键字:extends

注意:

1.继承时可以把多个类中相同的功能或方法抽取出来,

重新构造一个类出来 把这些类 建立继承关系

2.建立继承关系的同时 一定要符合逻辑(切记不要为了继承而继承)

3.java只允许单继承(多继承可以使用接口间接实现)

4.java 中允许多层继承(爷爷 父亲 儿子 孙子 …)

5.java中最顶层的父类(最基础) Object类

6.如果这个类没有写继承哪个父类 默认继承Object类

7.如果使用共有方法或者类 可以当前继承中创建最顶端的类来使用

8.如果要使用特殊的方法 就创建当前继承中最末端的类来使用

9.构造方法不能被继承,为了保障继承的完整性,在你创建子类对象的

时候 ,如果不调用父类的构造方法,系统会帮你调用父类无参构造方法

super 关键字

super代表是父类的对象

super 调用方法

* 调用对象 super点对象

* 调方法 super点方法()

public class Demo05 {
public static void main(String[] args) {
TestB testB = new TestB();
testB.fun();
}
}

class TestA{
int num1 = 10;
int num2 = 20;
//无参构造方法注释
//  public TestA() {
//  }

public TestA(int num1, int num2) {
super();
this.num1 = num1;
this.num2 = num2;
}
public void sayHi() {
System.out.println("jaja");
}
}
//继承TestA类
class TestB extends TestA{
int num1 = 30;

// 子类的构造方法中 如果你什么都不写 会默认调父类无参构造
//如果父类 没有无参的构造方法 就证明 父类当中一定有有参方法
//无论有参 还是无参 子类的构造方法中必须调用一个
//如果没有调用无参的, 必须要手动调用一个有参构造方法
public TestB(int num1, int num2) {
super(num1, num2);
}
public void fun() {
//使用this 时 会现在本类中寻找该属性 没找到 就去父类中找
System.out.println(this.num1 + " " + this.num2);
System.out.println(super.num1);
//  this.sayHi();
//  super 调用方法  super.方法();  super();调用父类构造方法  this(); 调用本类构造方法
//  super.sayHi();
}
}


方法重写和方法重载的区别

方法重写

注意:方法声明完全一致的时候,叫方法的重写

方法的重写建立在类与类之间有继承关系

方法重载

实现相同的功能,但是函数的内部实现不同。函数的重载是函数名字相同,并且只跟参数有关(参数的类型 参数的顺序 参数的个数有关),跟参数的返回值和参数名无关。

* Override(重写)和Overload(重载)的区别
* 1.重写前提:需要继承关系
*   重载前提:同一个类里
* 2.重写需要方法声明完全一致
*   重载只跟参数有关
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐