继承 多态 封装
1.继承用单词extends。一般子类可以继承父类的方法和属性,但是私有的能继承,但子类不能使用,在子类访问父类的构造方法需要用到super关键字,一般super放在mian方法的第一行,并且只要继承,系统会默认调用父类的无参构造方法。并且如果是连续继承,无参构造方法会从最上面层的父类开始调用。如果调用本类的方法,则使用this关键字。
2.多态,指的是多种形式。它使用不同的实例而执行不同的操作。多态包括方法的重写和方法的重载,方法的重写是使用继承时对父类的方法进行重写,比如形状有绘图的方法,在其子类三角形和正方形中。有绘图的方法,所以在其子类中对方法进行重写,使其绘制不同的图形,方法的重写会覆盖父类的方法,在子类调用重写的方法会默认为子类重写的方法,而不会调用父类的方法。方法之间可以互相调用。而方法的重载,是在同一个类中对同一个方法,但是参数不同的方法进行重写,这两个概念不要混淆。方法的调用遵循就近原则。
3,程序中只有类,属性,和方法,所以修饰符就是修饰这三个,访问修饰符表示一种权限,访问修饰符有pravate(私有的)只有该类可以访问、protect(保护的)只有该类及其子类的成员可以访问,同一个包中的类也可以访问,public(公共的)该类或者非该类均可以访问,默认(相同数据包中的类可以访问)。类一般使用公共的。构造方法一般在单例模式下使用私有的。否则使用共有的。
4.
定义人类Person, (1) 字段:身份证号idCard,姓名name,性别gender,年龄age,职业profession,联系方式phone。 并定义相应的属性; (2) 定义函数message()输出个人的基本信息 (3) 定义默认的构造函数,并打印一句话,输出“我是人类”。
定义一个教师类Teacher,派生于人类; (a) 具有字段:职工号wordID,所教授的课程名curriculum ,所属院系academy,并定义相应的属性 (b) 重写构造函数。 (c) 定义一个普通方法teach(),输出我是教学的。
----------- 定义一个数学教师类MathTeacher,派生于教师类; (a)重写父类的teach();输出我是从事数学教学的。 (b)重写默认构造函数。再写一个带参数的构成函数 MathTeacher(String name) (c)有两个重载方法,ready(),ready(String scource);
定义一个英语教师类EnglishTeacher,派生于教师类; (a)重写父类的teach();输出我是从事英语教学的。 (b)重写默认构造函数。再写一个带参数的构成函数 EnglishTeacher(String name),并显示的调用父类的构成方法 (c)有两个重载方法,write(),write(String scource);
package com.pojo; public class Person { public long IdCard; public String name; public boolean gender; public int age; public String profession; public String phone; public void message(){ System.out.println("输出个人基本信息"); } public Person(){ System.out.println("我是人类"); } public static void main(String []args){ MathTeacher mathTeacher=new MathTeacher("zhangsan"); System.out.println("个人基本信息"); } } class Teacher extends Person{ public String wordID; public String curriculum; public String academy; public Teacher(){ this.name="王麻子"; this.IdCard=12; this.gender=true; this.age=35; this.profession="英语教师"; this.phone="13532452473"; System.out.println("我是教师"); } public void teach(){ System.out.println("我是教学的"); } } class MathTeacher extends Teacher{ public void teach(){ System.out.println("我是从实输血教学的"); } public MathTeacher(String name){ this.name=name; this.IdCard=12; this.gender=false; this.age=45; this.profession="数学教师"; this.phone="12354452473"; System.out.println(name+IdCard+gender+age+profession+phone); } public void ready(){ System.out.println("我在教学生读"); } public void ready(String scource){ System.out.println("在教一个学生"); } } class EnglishTeacher extends Teacher{ public void teach(){ System.out.println("我是从事英语教学的"); } public EnglishTeacher(){ System.out.println("卧室英语教师"); } public EnglishTeacher(String name){ this.name="李四"; System.out.println("我是李思老师"); } public void write(){ System.out.println("我在教学生们写"); } public void write(String scource){ System.out.println("我在教一个学生写"); } }
5,方法修饰符有static(静态的,不能修饰类。可以修饰属性和方法)。作用:用static修饰的属性在内存中会占用固定的内存空间。不会隶属任何一个实例对象。所有的实例对象都共享这个变量,类似全局变量,比较节省内存,但是这个内存空间要在程序执行完了之后才会消失,。一般静态变量都使用类名访问,不使用对象去访问。使用类名去访问是因为静态的是共享的,static也可以修饰方法,叫静态方法,静态方法只能访问静态变量,直接使用类名访问,还可以修饰一段代码static{ . 。 。 。 。},让他是静态的,称为语句块,这个静态语句块会比main运行之前运行,但是只会运行一次。 final(最终的),不可改变的,修饰类,属性,方法,不能用类名访问,只能访问,不能修改,修饰方法的特点:不能用类名直接访问,一般和普通方法没什么区别,但是只对子类有用,子类继承的时候不能重写父类的方法。修饰类的时候,该类不可以被继承。俗称太监类。; 常量一般使用全大写,属性首字母小写,驼峰式命名,这是命名规范。 abstract(抽象的)对类抽象,说明该类不可以被new,一般具有抽象的类就用该关键字来修饰,防止被抽象化的类被实例化,因为抽象没有意义,如人类。方法也可以别抽象化,如果一个方法必须要子类实现,就要把该方法抽象定义为一个抽象方法。抽象方法没有方法体。
6.接口(interface).接口就是某个事物对外提供的一些功能的说明。可以利用接口实现多态,同时接口也弥补了java单一继承的弱点。接口使用interface关键字定义接口,一般使用接口声明方法或常量,接口中的方法只能是声明,不能是具体的实现(就是没有方法体)。实现接口用关键字implements .实现就一定要实现接口的方法和常量,接口可以实现多个,一个类实现一个接口或者多个接口,并且还可以继承其他类。
7.
1、定义抽象类员工Employee, (1) 保护字段:姓名name,性别gender,年龄age等基本属性。 (2) 定义抽象方法函数getsalary()表示领工资的操作 (3) 定义普通函数whoami()输出 :我是+姓名 (4) 拥有(姓名name,性别gender)参数的构造函数 (5) 使用常量定义员工的三个状态:离职=0;在职=1;试用期=2
定义一个经理类Manager 派生于员工; (a) 除了有员工等基本属性外,还有岗位级别 gree私有属性 (b) 经理领7000元工资,打印并输出工资。 (c) 重写父类的whoami(),调用父类的whoami()方法,再输出:我是一名经理。
定义一个会计类Technician,派生于员工类; (a)除了有员工等基本属性外,还有会计等级 rating私有属性 (b)会计领3000元工资,打印并输出工资。 (c)重写父类的whoami(),调用父类的whoami()方法,再输出:我是一名会计。
public abstract class Employee { private String name; private int age; public abstract void getsalary(); public void whoami() { System.out.println("我是:"+name+age); } public Employee(String name,int age){ } int ZTLZ=0; int ZTZZ=1; int ZTSY=2; } class Manager extends Employee{ public Manager(String name, int age) { super(name, age); // TODO Auto-generated constructor stub } private int gree; public void getsalary(){ System.out.println("领工资:7000"); } public void whoami(){ System.out.println("我是一名经理"+gree); } } class Technician extends Employee{ public Technician(String name, int age) { super(name, age); // TODO Auto-generated constructor stub } public void getsalary(){ System.out.println("会计领取工资3000元"); } public void whoami(){ System.out.println("我是一名会计"+rating); } private int rating; }
8.
2、、定义一个计算器接口Cal 有一个方法:int opetator(int a,int b);
定义一个类Add实现这个接口,计算两个数的和
定义一个类Mul实现这个接口,计算两个数的积
定义一个类Mod实现这个接口,计算两个数的模
写一个Run类,测试运行
public class Run { public static void main(String[]args){ int a=4; int b=2; Cal cal=new Mul(); int jieguo=cal.opetator(a, b); System.out.println(jieguo); } }
public interface Cal { int opetator(int a,int b); } class Add implements Cal{ @Override public int opetator(int a, int b) { // TODO Auto-generated method stub return a+b; } } class Mul implements Cal{ @Override public int opetator(int a, int b) { // TODO Auto-generated method stub return a*b; } } class Mod implements Cal{ @Override public int opetator(int a, int b) { // TODO Auto-generated method stub return a/b; } }