1、代码块,是用{}括起来的代码。
局部代码块,是用与限定变量的生命周期,及早释放,提高内存利用率。
构造代码块,把多个构造方法中相同的代码可以放到这里,每个构造方法执行前,首先执行构造代码块。
静态代码块,对类的数据进行出事话,仅仅只执行一次。
2、继承,把多个类中相同相同的成员给提取出来定义到一个独立的类中,然后让多个类和该独立的类产生一个关系,这多个类就具备了这些内容,这个关系叫继承。
java中继承的关键字是extends。格式为class 子类名 extends 父类名{}
继承可以提高的代码的复用性,提高代码的维护性,让类与类之间产生一个关系,是多态的前提。
继承的弊端,让类的耦合性增强,这样某个类的改变,就会影响其他和该类相关的类。打破了封装性。
java中继承的特点,只支持单继承。可以多层继承。
举例:
class GrandFather{
public void show1() {
System.out.println("I am grandfather");
}
}
class Father extends GrandFather{
public void show2() {
System.out.println("I am father");
}
}
class Son extends Father{
public void show3() {
System.out.println("I am son");
}
}
public class Main {
public static void main(String[] args) {
Son s=new Son();
s.show1();
s.show2();
s.show3();
}
}
继承的注意事项,子类不能继承父类的私有成员。子类不能继承父类的构造方法,但是可以通过super去访问。不要为了部分功能去继承
class Father{
private int num1=10;
int num2=20;
private void show1() {
System.out.println(num1);
System.out.println(num2);
}
public void show2() {
System.out.println(num1);
System.out.println(num2);
}
}
class Son extends Father{
}
public class Main {
public static void main(String[] args) {
Son s=new Son();
//s.show1();子类不能继承父类的私有方法
//System.out.println(s.num1);子类不能访问父类的私有变量
s.show2();
System.out.println(s.num2);
}
}
java中的成员关系
a:成员变量,子类的成员变量名称和父类中的成员变量名称不一样很简单,如果不一样子类的方法访问变量的查找顺序。在子类方法的局部范围找,有就使用。在子类的成员范围找,有就使用。在父类的成员范围找,有就使用。找不到,就报错。
b:构造方法,子类的构造方法默认会去访问父类的无参构造方法,是为了子类访问父类数据的初始化。如果父类中没有无参构造方法,子类通过super去明确调用带参构造。子类通过this调用本身的其他构造,但是一定会有一个区访问了父类的构造,让父类提供无参构造
c:成员方法,子类的成员方法和父类的成员方法不一样很简单,如果不一样找的顺序为,在子类中找,有就使用。在父类中找,有就使用。
举例:
class Father{
public Father() {
System.out.println("father");
}
}
class Son extends Father{
public Son() {
//super();//这个不写super,默认为有super
System.out.println("son");
}
public void show() {
System.out.println("hello");
}
}
public class Main {
public static void main(String[] args) {
Son s=new Son();//在构造时首先输出的是父类的构造方法
s.show();
}
}
class Person{
private String name;
private int age;
public Person() {}//如果这个注销,下面的继承将编译错误
public Person(String name,int age) {
this.name=name;
this.age=age;
}//这个用的不多,但是存在
public void setName(String name) {
this.name=name;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age=age;
}
public int getAge() {
return age;
}
}
class Student extends Person{
public Student() {}
public Student(String name,int age) {
super.setName(name);//super调用的是父类的
super.setAge(age);
//或者
//super(name,age);
}
}
public class Main {
public static void main(String[] args) {
//方式1
Student s=new Student();//无参构造会自动生成
s.setName("贺志营");
s.setAge(20);
System.out.println(s.getName()+"---"+s.getAge());
//方式2
Student s1=new Student("贺志营",20);
System.out.println(s1.getName()+"---"+s1.getAge());
}
}