继承是面向对象三大特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义,以及追加属性和方法
class 子类 extends 父类 {}
class Dog extends Animal { }
class Father {
public void show() {
System.out.println("show方法被调用");
}
}
class Son extends Father {
public void method() {
System.out.println("method方法被调用");
}
}
public class Demo {
public static void main(String[] args) {
//创建对象,调用方法
Father fa = new Father();
fa.show();
Son so = new Son();
so.method();
so.show();
}
}
is ... a
(谁是谁的一种) 的关系,不能盲目使用继承。在子类方法中访问一个变量,采用的是就近原则。
class Father {
int num = 10;
}
class Son {
int num = 20;
public void show(){
int num = 30;
System.out.println(num);
}
}
public class Demo {
public static void main(String[] args) {
Son son = new Son();
son.show();// 输出show方法中的局部变量30
}
}
this.成员变量
-访问本类成员变量super.成员变量
-访问父类成员变量this.成员方法
-访问本类成员方法super.成员方法
-访问父类成员方法this()
-访问本类构造方法super()
-访问父类构造方法super()
public class Father {
private void show() {
System.out.println("Father 中 show() 方法被调用");
}
void method() {
System.out.println("Father 中 show() 方法被调用");
}
}
public class Son extends Father {
// 编译【出错】,子类不能重写父类私有的方法
@Override
private void show() {
System.out.println("Son 中 show() 方法被调用");
}
// 编译【出错】,子类重写父类方法的时候,访问权限需要大于等于父类
@Override
private void method() {
System.out.println("Son 中 show() 方法被调用");
}
// 编译【通过】,子类重写父类方法的时候,访问权限需要大于等于父类
@Override
public void method() {
System.out.println("Son 中 show() 方法被调用");
}
}
class A extends B,C { }
class Grandpa {
public void drink() {
System.out.println("爷爷爱喝酒");
}
}
class Father extends Grandpa {
public void smoke() {
System.out.println("爸爸爱抽烟");
}
}
class Son extends Father {
}
public class Demo{
public static void main(String[] args) {
Son son = new Son();
//调用 Grandpa类 方法
son.drink();
//调用 Father类 方法
son.smoke();
}
}
package包名;
(多级包用.分开)package com.fanyi.demo;
javac -d .类名.java
javac -d . com.fanyi.demo.HelloWorld.java
java包名+类名
java com.fanyi.demo.HelloWorld
import包名;
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
// 1. 没有导包,创建Scnaner对象
java.util.Scanner sc = new java.util.Scanner(System.in);
}
}
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
// 1. 没有导包,创建Scnaner对象
Scanner sc = new Scanner(System.in);
}
}
修饰符 | 同一个类中 | 同一个包中子类无关类 | 不同包的子类 | 不同包的无关类 |
---|---|---|---|---|
private | √ | |||
default | √ | √ | ||
protected | √ | √ | √ | |
public | √ | √ | √ | √ |
• fianl修饰基本数据类型变量 。final修饰指的是基本类型的数据值不能发生改变 ・final修饰引用数据类型变量 。final修饰指的是引用类型的地址值不能发生改变,但是地址里面的内容是可以发生改变的 。举例: public static void main(String[] args){ final Student s = new Student(23); s = new Student (2 4) ; // 错误 s . setAge (24); / / 正确 )
class Student {
public String name; //姓名
public int age; //年龄
public static String school; //学校 共享数据!所以设计为静态!
public void show() {
System.out.println(name + "," + age + "," + school);
}
}
public class Demo {
public static void main(String[] args) {
// 为对象的共享数据赋值
Student.school = "大学";
Student s1 = new Student();
s1.name = "小明";
s1.age = 20;
s1.show();
Student s2 = new Student();
s2.name = "小红";
s2.age = 18;
s2.show();
}
}
总的来说,静态成员方法只能访问静态成员