目录
1.static
(1)静态变量
public class staticDemo1 {
private String name;
private int age;
private String gender;
public static String teachername;
public staticDemo1() {
}
public staticDemo1(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
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;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public void study(){
System.out.println(name+"正在学习");
}
public void show(){
System.out.println(name+","+age+","+gender+","+teachername);
}
}
public class staticDemo1Test {
public static void main(String[] args) {
staticDemo1.teachername = "阿伟老师";
staticDemo1 s1 = new staticDemo1();
staticDemo1 s2 = new staticDemo1();
s1.setName("张三");
s1.setAge(18);
s1.setGender("女");
s1.study();
s1.show();
System.out.println("-------------");
s2.setName("李四");
s2.setAge(20);
s2.setGender("女");
s2.study();
s2.show();
}
}
静态变量是随着类的加载而加载的,优先于对象的出现;
(2)静态方法
public class ArrayUtil {
// 私有化构造方法
// 目的:不让外界创建他的对象
private ArrayUtil() {
}
//需要定义为静态的方法调用
public static String printArr(int[] arr) {
StringBuilder sb = new StringBuilder();
sb.append("[");
for (int i = 0; i < arr.length; i++) {
if (i == arr.length - 1) {
sb.append((arr[i]));
} else {
sb.append(arr[i]).append(",");
}
}
sb.append("]");
return sb.toString();
}
public static double getAverage(double[] arr){
double sum = 0;
for (int i = 0; i < arr.length ; i++) {
sum = sum+arr[i];
}
return sum/arr.length;
}
}
public class ArrayUtilTest {
public static void main(String[] args) {
// 测试两个工具类的方法是否成功
int[] arr1 = {1,2,3,4,5};
String str = ArrayUtil.printArr(arr1);
System.out.println(str);
double[] arr2 ={1.5,3.7,4.9,5.8,6.6};
double avg = ArrayUtil.getAverage(arr2);
System.out.println(avg);
}
}
(3)static注意事项
2.继承
(1)什么是继承?继承的好处
(2)继承的特点
package Demo1;
public class Animal {
public void eat(){
System.out.println("在吃东西");
}
public void drank(){
System.out.println("在喝水");
}
}
package Demo1;
public class cat extends Animal{
public void catchMouse(){
System.out.println("猫在抓老鼠");
}
}
package Demo1;
public class buOu extends cat{
}
package Demo1;
public class Husky extends dog{
public void breakHome(){
System.out.println("在拆家");
}
}
package Demo1;
public class Test {
public static void main(String[] args) {
// 创建对象并调用方法
// 1.创建布偶猫的对象
buOu rd = new buOu();
rd.eat();
rd.catchMouse();
rd.drank();
System.out.println("-----------------");
// 2.创建哈士奇的对象
Husky h = new Husky();
h.breakHome();
h.drank();
h.eat();
}
}
(3)子类可以继承父类的哪些内容
子类中的所有成员变量都可以继承下来,但是被private修饰的成员变量不能被直接调用,需要javabean
虚方法:不被final,private,static等修饰的方法
(4)继承中成员变量与成员方法的的访问特点
成员变量:
成员方法:
package Demo2;
public class Dogs {
public void eat(){
System.out.println("狗在吃狗粮");
}
public void lookHome(){
System.out.println("狗在看家");
}
}
public class Husky extends Dogs {
public void breakhome(){
System.out.println("哈士奇在拆家");
}
}
public class ChineseDog extends Dogs {
// 父类中的方法不能满足我们的需求了,所以需要进行重写
// 而且中华田园犬完全用不到父类中的代码,所以不需要通过super进行调用
public void eat(){
System.out.println("吃剩饭");
}
}
public class SharPi extends Dogs {
// 因为沙皮狗吃的狗粮和骨头
// 父类中的方法不能满足我们的需求了,所以需要进行重写
@Override
public void eat(){
super.eat();
// 调用父类的eat:吃狗粮
System.out.println("狗啃骨头");
}
}
public class Test {
public static void main(String[] args) {
Husky h = new Husky();
h.eat();
h.breakhome();
h.lookHome();
ChineseDog c = new ChineseDog();
c.eat();
c.lookHome();
}
}
(5)继承中:构造方法的访问特点
父类中的构造方法不会被子类继承
(6)this super 使用总结
public class students {
private String name;
private int age;
private String bj;
private String num;
public students() {
// 需求:默认为18岁
this(null,18,null,null);
System.out.println("我是学生"+age+"岁了");
}
package Demo3;
public class Employee {
private String id;
private String name;
private double salary;
public Employee() {
}
public Employee(String id, String name, double salary) {
this.id = id;
this.name = name;
this.salary = salary;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public void work(){
System.out.println("员工在工作");
}
public void eat(){
System.out.println("在吃饭");
}
}
package Demo3;
public class Manager extends Employee{
private double bouns;
//空参构造
public Manager() {
}
//带全部参数的构造
// 父类加子类
public Manager(String id, String name, double salary, double bouns) {
super(id, name, salary);
this.bouns = bouns;
}
public double getBouns() {
return bouns;
}
public void setBouns(double bouns) {
this.bouns = bouns;
}
@Override
public void work(){
System.out.println("管理其他人");
}
}
package Demo3;
public class Cook extends Employee{
public Cook() {
}
public Cook(String id, String name, double salary) {
super(id, name, salary);
}
@Override
public void work(){
System.out.println("厨师正在炒菜");
}
}
package Demo3;
public class Test {
public static void main(String[] args) {
// 创建对象,并赋值调用
Manager m = new Manager("heima001","张三",14888,5000);
System.out.println(m.getId()+","+m.getName()+","+m.getSalary()+","+m.getBouns());
m.work();
m.eat();
System.out.println("---------------------");
Cook c = new Cook();
c.setId("heima002");
c.setName("李四");
c.setSalary(6999);
System.out.println(c.getId()+","+c.getName()+","+c.getSalary());
c.work();
c.eat();
}
}
3.多态
(1)多态的基本认识
如果没有多态:
代码重复累赘
有了多态后:
package Demo1;
public class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
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;
}
public void show(){
System.out.println(name+","+age);
}
}
package Demo1;
public class Student extends Person{
@Override
public void show(){
System.out.println("学生的信息为:"+getName()+","+getAge()+"岁。");
}
}
package Demo1;
public class Teacher extends Person{
@Override
public void show(){
System.out.println("老师的信息为:"+getName()+","+getAge()+"岁。");
}
}
package Demo1;
public class Administrator extends Person{
@Override
public void show(){
System.out.println("管理员的信息为:"+getName()+","+getAge()+"岁。");
}
}
package Demo1;
public class Test {
public static void main(String[] args) {
// 创建三个对象,并调用register方法
Student s = new Student();
s.setAge(18);
s.setName("张三");
Teacher t = new Teacher();
t.setAge(34);
t.setName("李四");
Administrator a = new Administrator();
a.setAge(48);
a.setName("王五");
register(s);
register(t);
register(a);
}
//这个方法既可以接收老师,学生还可以接收管理人员的信息
//只能把参数写成这三个类型的父类
public static void register(Person p){
p.show();
}
}
(2)多态调用成员的特点
(3)多态的优势和弊端
instanceof:表示判断,变量a是不是属于Dog类型,若不是,if语句则将转其Dog类型