java面向对象继承

  • 代码块概述:在Java中,使用{}括起来的代码被称为代码块。
    代码块分类:根据其位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块,同步代码块。
    常见代码块的应用
    a:局部代码块 :在方法中出现;限定变量生命周期,及早释放,提高内存利用率
    b:构造代码块 :在类中方法外出现;多个构造方法方法中相同的代码存放到一起,每次调用构造都执行,并且在构造方法前执行
    c:静态代码块 :在类中方法外出现,加了static修饰;在类中方法外出现,并加上static修饰;用于给类进行初始化,在加载的时候就执行,并且只执行一次。
class Student {
			static {
				System.out.println("Student 静态代码块");
			}
			
			{
				System.out.println("Student 构造代码块");
			}
			
			public Student() {
				System.out.println("Student 构造方法");
			}
		}

		class StudentDemo {
			static {
				System.out.println("StudentDemo的静态代码块");
			}
			
			public static void main(String[] args) {
				System.out.println("我是main方法");
				
				Student s1 = new Student();
				Student s2 = new Student();
			}
		}
  • 继承:多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可
  • 通过extends关键字可以实现类与类的继承;class 子类名 extends 父类名 {} ;单独的这个类称为父类,基类或者超类;这多个类可以称为子类或者派生类。
  • 继承的好处:提高了代码的复用性、提高了代码的维护性、让类与类之间产生了关系,是多态的前提
  • 继承的弊端:类的耦合性增强了。
  • 继承特点:java只支持单继承,不支持多继承,但可以多层继承
  • -继承的注意事项:子类只能继承父类所有非私有的成员(成员方法和成员变量)
    子类不能继承父类的构造方法,但是可以通过super(待会儿讲)关键字去访问父类构造方法。
    不要为了部分功能而去继承
  • this和super的使用
    a:调用成员变量
    this.成员变量 调用本类的成员变量
    super.成员变量 调用父类的成员变量
    b:调用构造方法
    this(…) 调用本类的构造方法
    super(…) 调用父类的构造方法
    c:调用成员方法
    this.成员方法 调用本类的成员方法
    super.成员方法 调用父类的成员方法
  • 继承中的构造方法:子类中所有的构造方法默认都会访问父类中空参数的构造方法
    原因:因为子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化之前,一定要先完成父类数据的初始化。
  • 父类没有无参构造方法,子类怎么办?
    a: 在父类中添加一个无参的构造方法
    b:子类通过super去显示调用父类其他的带参的构造方法
    c:子类通过this去调用本类的其他构造方法
    本类其他构造也必须首先访问了父类构造
    • 注意事项:super(…)或者this(….)必须出现在第一条语句上
class Fu{
			public int num = 10;
			public Fu(){
				System.out.println("fu");
			}
		}
		class Zi extends Fu{
			public int num = 20;
			public Zi(){
				System.out.println("zi");
			}
			public void show(){
				int num = 30;
				System.out.println(num);
				System.out.println(this.num);
				System.out.println(super.num);
			}
		}
		class Test {
			public static void main(String[] args) {
				Zi z = new Zi();
				z.show();
			}
		}

输出的是
fu
zi
30
20
10

  • 方法重写:子类中出现了和父类中一模一样的方法声明(方法名,参数列表,返回值类型),也被称为方法覆盖,方法复写。
  • 方法重写注意:父类中私有方法不能被重写、子类重写父类方法时,访问权限不能更低,对好一致、父类静态方法,子类也必须通过静态方法进行重写。
  • final修饰特点:修饰类:被修饰类不能被继承
    修饰方法: 被修饰的方法不能被重写
    修饰变量: 被修饰的变量不能被重新赋值,因为这个量其实是一个常量

猜你喜欢

转载自blog.csdn.net/qq_36558578/article/details/85109035