Both results are compatible. There are two different results and conclusions for two different $H_0$. (what $H_0$ is more reasonable is another question).
If the sample size was enough, for example of $n=500$ students, and the proportion was only $p=0.01$, for example, certainly Tony will be sure (without any test) that true proportion is not equal to $0.3$ --> $H_0$ rejected. And John, also a clever man, will note that without any test is also clear that true proportion must be near 0.01 and therefore cannot be greater in any case more than $0.3$ --> $H_0$ accepted. What is the problem here?
And what about if the proportion of the sample was $p=0.33$? Then the brain calculation of Tony is not reliable, but make a correct test in R with a bigger sample: according to his $H_0$ and the results is a p-value > 0.05$
prop.test(200,600,c(.3), alternative ="two.sided")
While John make this according to their $H_0$:
prop.test(200,600,c(.3), alternative ="greater")
And the p-value was > 0.05.
Tony result cancel Jhon results, or at the contrary in this case? No. The apparent difference is not. The mistake here is consider that Tony have tested only if p is greater than 0.3. Also have tested if p is less than 0.3. For Tony there are two sources of error ($\alpha$ are in two tails) and this is too much to reject safely $H_0$, while Jhon's hypothesis have only a possible tail of error ($\alpha/2$) since he is comparing only if p is greater than 0.3. Therefore Jhon can reject his $H_0$ and Tony cannot, because is not the same hypothesis.
Moreover, it is worth to remember that reject $H_0$ means that you have demonstrated (with little margin of error) that $H_1$ is true. However, if accept your $H_0$ means nothing. Only that you have not demonstrated that $H_1$ is true. But this does not mean that $H_1$ is false, (may be with a bigger sample...) nor that $H_0$ true, and therefore, in any way than another $H_0$ is false or true.